我使用的C库有一个函数,它返回一个指向字符指针数组的指针:
extern char** getIds();
使用示例:
char **list, **list_save;
list_save = list = getIds();
while (list && *list)
{
printf("Id: %sn", *list);
list++;
}
freeIds(list_save);
其中freeIds
也来自C库,并释放在getIds
期间分配的内存。
它们也提供了一个.Net互操作程序集,但它不导入getIds
函数。我有权访问互操作程序集源代码。
我的程序是用C#编写的,所以我想知道是否可以向互操作程序集添加导入,它应该是什么样子,以及我的C#代码调用该函数必须是什么样子。
我对dll导入的猜测是:
[DllImport("foo.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr getIds();
但我还没能让C#调用它,所以我不知道dll导入是否正确。
看看Marshaling char**。你的dllimport应该能工作。