C# 如何在C中从dll导入访问字符***#

C# 如何在C中从dll导入访问字符***#,c#,dll,dllimport,C#,Dll,Dllimport,我在win32 dll中有一个函数,其签名为: void func1(int a, char*** outData) int a-->输入参数 char***outData-->输出参数-指向字符字符串数组的指针 你知道如何在C中使用dll导入访问它吗?签名应该是什么。对于复杂类型,如三点指针,我发现最好的方法是简单地将其封送为IntPtr [DllImport("Some.dll")] private static extern void func1(int a, out IntPtr

我在win32 dll中有一个函数,其签名为:

void func1(int a, char*** outData)
int a-->输入参数
char***outData-->输出参数-指向字符字符串数组的指针



你知道如何在C中使用dll导入访问它吗?签名应该是什么。

对于复杂类型,如三点指针,我发现最好的方法是简单地将其封送为
IntPtr

[DllImport("Some.dll")]
private static extern void func1(int a, out IntPtr ptr)
一旦此函数返回
IntPtr
值,它将基本上表示一个
char**


但是使用这个值几乎是不可能的,因为我们不知道长度。在托管代码中使用数组之前,您需要更改函数签名以传回数组的长度。

字符*数组可能会以空指针终止,而不是显式存储长度。您是否可以以任何方式使用StringBuilder,通常哪一个是可以作为参数传入的?@Mikael:StringBuilder不能处理多个字符串。封送处理类将允许您从该char*数组中检索原始char*,然后将每个有效char*转换为字符串。这可能很复杂,但我不认为我会同意“几乎不可能”的说法。嗨,很抱歉回复晚了。他身体不好。现在来看问题。假设我更改函数签名以返回长度。void func1(int a,char***outData,int*len)那么我在C#中的签名将是:DllImport(“Some.dll”)]私有静态外部void func1(int a,out IntPtr ptr,out int len)现在我如何使用这个IntPtr来获取值。你能给我一些代码片段吗?很抱歉直接询问代码片段,但我的问题是我对C#比较陌生&这个问题很奇怪。谢谢你的帮助。