1

我在 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() 函数时,它显示没有找到入口点。请帮助。

4

1 回答 1

1

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

外部资源

PS 还有一个命令行工具可以从 DLL 中转储信息以检索确切的符号名称。符号的命名惯例各不相同。

于 2012-07-18T15:26:38.687 回答