c# - 尝试从 C# 调用非托管函数时出现“System.EntryPointNotFoundException”

标签 c# c++ dll dllimport

我终于有了一个完整的 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/

相关文章:

C++ - 无法实例化抽象类

c++ - QList 通过初始化列表初始化

c++ - dll 在 VS2010 项目中运行良好,但在 VS6 应用程序中出现访问冲突

c# - Windows Phone 8应用随机崩溃,错误代码为-2147220717(0x80040313)

c# - 将 VS 2013 Community 升级到 Professional 后,无法在解决方案中加载 Azure 2.7 项目

c# - 通用查询方法

c# - .NET Native 编译器不断抛出编译错误

c++ - OpenCV 相机校准,断言失败 <ni> 0 && ni==ni1>

dll - Inno 脚本从互联网异步下载文件

c++ - 使用 dll 库时,是否需要包含用于构建 dll 的所有头文件?