C# - 在 C# 中的等效数据类型中编组 char **

C# - marshaling char ** in Equivalent data type in C#

我正在开发使用基于 C 的库的 C#.Net 应用程序。因为它需要 C# Wrapper,所以我正在实现代码以从基于 C 的库中编组函数,以便在 C# 中访问并正确映射数据类型。

我在库中有一个函数,它通过引用获取一个 char 数组,该函数包含用其中的值更新数组的逻辑。因此,在函数调用时我们可以传递空数组并在调用后访问结果值。

Objective:通过引用传递空字符数组和return值

C-dll函数:

int function_call(char ** var);

C函数调用代码:

char *name = NULL;
int val = function_Call(&name);

C# 包装器代码:

[DllImport("mylibrary.dll", CallingConvention = CallingConvention.Cdecl)]
static extern int function_call([In] string[] val);

C#函数调用代码:

 string[] name = null;
 int ret = function_call(name);

我遇到过类似的查询:

  1. How to get char** using C#? [duplicate]
  2. How do I marshal a pointer to an array of pointers to structures?

  3. marshaling char**

  4. C# equivalent to C const char**

全部都试过了,还是不行。 returns 空值。 有没有一种简单的方法来编组 Char ** ?

您可以简单地将其编组为 IntPtr :

[DllImport("mylibrary.dll", CallingConvention = CallingConvention.Cdecl)]
static extern int function_call(IntPtr val);

只是在函数调用端,将内存分配给指针并访问指针保存的数据:将非托管内存块中的数据编组为泛型类型参数指定的类型。