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

时间:2017-10-13 22:36:17

标签: c# c pointers marshalling dllimport

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

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

目标:传递null char数组并通过引用返回值

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**

  5. 尝试了所有这些,但没有奏效。返回null值。 是否有一种简单的工作方式来组织Char **?

1 个答案:

答案 0 :(得分:0)

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

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

就在函数调用方面,将mem分配给指针并访问指针所持有的数据:Marshal数据从非托管内存块到泛型类型参数指定的类型。