wchar_t** or char** to string[], or alternative
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 25/100
Research direction
Start with the C header and compare the generated C# extern definition and wrapper against the intended string[] call. Trace how CppSharp handles wchar_t** and char** parameters, then define a supported generated representation and verify that the example can pass multiple strings; the issue names no source files or tests.
Written by the indexing model from the issue text.
Description
Hi all,
Please refer to detail below. I would like to know how can I generate a C# string[] parameter for a wchar_t** parameter in the C header.
Alternatively, how can I call/pass a string[] array to the char** parameter in the generated C# code.
Header
uint add_many_items(const wchar_t* name, const wchar_t** items);
Generated code
- Extern definition
[SuppressUnmanagedCodeSecurity, DllImport("lib-test.so", EntryPoint = "add_many_items", CallingConvention = __CallingConvention.Cdecl)] internal static extern uint AddManyItems([MarshalAs(UnmanagedType.CustomMarshaler, MarshalTypeRef = typeof(CppSharp.Runtime.UTF32Marshaller))] string name, char** items); - Method
public static uint AddManyItems(string name, char** items) { var __ret = __Internal.AddManyItems(name, items); return __ret; }
Intended usage
string[] items = { "item-1", "item-2" };
AddManyItems("list-a", items);
Used settings
var options = driver.Options;
options.GeneratorKind = GeneratorKind.CSharp;
options.GenerationOutputMode = GenerationOutputMode.FilePerUnit;
var parserOptions = driver.ParserOptions;
parserOptions.TargetTriple = "aarch64-linux-gnu"; // Target linux generation (which uses UTTF32 for strings)
parserOptions.MicrosoftMode = false;
parserOptions.Verbose = true;
parserOptions.LanguageVersion = CppSharp.Parser.LanguageVersion.CPP17;
parserOptions.AddIncludeDirs(@"..\..\..\..\..\deepstream-services-library\src");
- Dominant language
- C#
- Stars
- 3.4k
- Forks
- 541
- PR merge metrics
- No merged PRs in 30d
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from mono/CppSharp
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
-
Difficulty 4/5 3-5 days Newbie friendliness 35/100
-
Difficulty 4/5 3-5 days Newbie friendliness 45/100
-
How to get started Open
Difficulty 3/5 1-2 days Newbie friendliness 38/100
-
Difficulty 4/5 3-5 days Newbie friendliness 25/100
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
-
:watch: Not Triaged 11.0 fundamentals/subsvc
Difficulty 2/5 1-3 hours Newbie friendliness 92/100
dotnet/AspNetCore.Docs#37699 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SubtitleEdit/subtitleedit#15108 · 1 comment ·
-
area/docs-content Bug pulumi/docs
Difficulty 1/5 1-3 hours Newbie friendliness 94/100
-
agentic-workflows untriaged
Difficulty 2/5 1-3 hours Newbie friendliness 76/100