想要使用来自C#的编组从C函数获取字符串数组作为输出

时间:2012-07-18 14:43:42

标签: c# c marshalling

我在C

中有功能
void GetCharArray(char* arrayNew[5])
{
arrayNew[5]= {"Test", 
            "Test2",
            "Test4",
            "Test5",
            "Test6",        

    };  
}

extern "C" __declspec(dllexport) void GetCharArray(char* arrayNew[5]);

想要从我的C#代码中调用它,如下所示

   [DllImport(@"Test.dll",
        CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]       
    public static extern void GetCharArray(String[] sbOut);

 List<string> testList = new List<string>();
 GetCharArray(testList .ToArray());

我希望我的testList由C代码中的值填充。我正确地编组它。当调试器到达GetCharArray()函数时,它显示没有找到入口点。请帮助。

1 个答案:

答案 0 :(得分:1)

找不到切入点。意味着它无法找到符号。虽然函数名称是GetCharArray,但其符号名称并未完全命名为GetCharArray。确保在编译本机DLL时导出符号并创建链接器定义并命名该符号,以便DllImport可以正常运行。如果您需要更多帮助,我可以提供更多信息。我想我知道为什么它不起作用因为我有类似的问题,因为我正确地使用了DllImport。

外部资源

P.S。还有一个命令行工具可以从DLL转储信息以检索确切的符号名称。符号的命名对象各不相同。