Marshal是一个双char指针返回值

我正在使用的AC库有一个函数,它返回一个指向char指针数组的指针:

extern char** getIds(); 

使用示例:

 char **list, **list_save; list_save = list = getIds(); while (list && *list) { printf("Id: %s\n", *list); list++; } freeIds(list_save); 

其中freeIds也来自C库,并释放在getIds期间分配的内存。

它们也提供.Net Interop程序集,但它不会导入getIds函数。 我可以访问interop汇编源代码。

我的程序是在C#中,所以我想知道是否可以在interop程序集中添加一个导入,它应该是什么样的,以及我的C#代码调用该函数的样子。

我对dll导入的猜测是:

 [DllImport("foo.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr getIds(); 

但是我无法让C#调用它,因此我不知道dll导入是否正确。

看看Marshaling char ** 。 你的dllimport应该工作。