我终于有了一个完整的 C++ DLL,但我无法从 C# 调用它。肯定是找到了 DLL,因为当我将它从文件夹中删除时,我得到了一个不同的异常,“DLLNotFoundException”。完整的错误描述是“无法在 DLL 'CComms.dll' 中找到名为 'GetNewInstance' 的入口点”。这些函数都是像这样用 C++ 导出的
__declspec(dllexport) DWORD __stdcall GetNewInstance();
我像这样从 C# 中调用它
[DllImport("CComms.dll")]
private static extern uint GetNewInstance();
// ... and in main
uint inst = GetNewInstance();
当我使用“dumpbin/exports CComms.dll”时,我得到一些奇怪的输出我不确定函数名称是否被破坏,这就是它找不到入口点的原因
7 6 00002FB0 ?GetNewInstance@@YGKXZ = ?GetNewInstance@@YGKXZ (unsigned long
__stdcall GetNewInstance(void))
我试过使用 __cdecl 而不是 __stdcall,结果相同。我已经接近完成这个项目了,我一直在寻找它,希望这是我的最后一件事。
谢谢。
最佳答案
您有两种创建 DLL 的方法。
一种是通过获取函数的地址(老派方式),第二种是通过参数和名称("new"方式,例如 .net 使用的方式)。
我想你没有正确使用你的 C++ dll
也许您应该使用 GetProcAddress
GetProcAddress Msdn
这里是一些关于 Dll exportation 的文档这可能会有用
关于c# - 尝试从 C# 调用非托管函数时出现“System.EntryPointNotFoundException”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9588018/