我正在研究使用基于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);
我遇到了类似的问题:
How do I marshal a pointer to an array of pointers to structures?
尝试了所有这些,但没有奏效。返回null值。 是否有一种简单的工作方式来组织Char **?
答案 0 :(得分:0)
您可以简单地将其编组为IntPtr:
[DllImport("mylibrary.dll", CallingConvention = CallingConvention.Cdecl)]
static extern int function_call(IntPtr val);
就在函数调用方面,将mem分配给指针并访问指针所持有的数据:Marshal数据从非托管内存块到泛型类型参数指定的类型。