Marshal是一个双char指针返回值

时间:2012-07-20 03:52:11

标签: c# c interop

我正在使用的C库有一个函数,它返回一个指向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函数。我可以访问互操作程序集源代码。

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

我对dll导入的猜测是:

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

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

1 个答案:

答案 0 :(得分:0)

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