我有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());

我希望用C代码中的值填充测试列表。我是否以正确的方式封送它。当调试器到达GetCharArray()函数时,它显示没有找到入口点。请帮忙。

最佳答案

找不到入口点。意味着它找不到符号。尽管函数名是GetCharArray,但它的符号名并没有完全命名为GetCharArray。编译本机DLL时,请确保导出符号并创建链接器定义并命名该符号,以便DllImport能够正常工作。如果你需要更多的帮助,我可以提供更多的信息。我想我知道为什么它不起作用,因为我有一个类似的问题,因为我正确地使用了DllImport。
外部资源
How to create a DEF file for exporting from a DLL
另外还有一个命令行工具,可以从DLL中转储信息,以获取确切的符号名。符号的命名转换是不同的。

10-02 10:36