C#运行时导入失败中的C++非托管DLL

C++ Unmanaged DLL in C# runtime import failure

本文关键字:DLL C++ 运行时 导入 失败      更新时间:2023-10-16

我正在使用32位体系结构的Microsoft Visual Studio 2013上运行一个C#XNA游戏项目。当试图在运行时使用DllImport标记加载非托管C++DLL时,我得到以下错误。请注意,此dll(fmod_event.dll)来自位于/fmoddesignerapi/API/下的fmod Ex程序员API

"System.DllNotFoundException"类型的未处理异常。
附加信息:无法加载DLL"fmod_event":找不到指定的模块。(HRESULT:0x8007007E的异常)

代码已被遵循,但在导入过程中失败。

[DllImport("fmod_event")]
private static extern RESULT FMOD_EventSystem_Create(ref IntPtr eventsystem);

我已经将dll添加到项目的根目录中,并将其设置为"如果更新则复制"。我可以确保这个dll同时存在于DEBUG和RELEASE bin文件夹中的正确位置。

当通过相同的下载文件导入位于/api/I下的"fmodex.dll"时,不会遇到相同的问题,并且使用以下代码一切正常:

[DllImport("fmodex")]
private static extern RESULT FMOD_System_Create(ref IntPtr system);

这两个dll都可以在同一个bin文件夹下看到
我曾尝试使用fmod_event.dll 32和64,但没有任何运气。

有人能深入了解为什么一个DLL加载正确,而另一个加载不正确吗?感谢

  • 指定.DLL作为扩展名
  • 确保文件存在于PATH中,或在DllImport中指定完整路径
  • 检查此DLL是否存在依赖模块。使用依赖项Walker来查找依赖DLL是否存在并且是否可加载
  • 检查32位和64位问题。32位进程无法加载64位DLL,反之亦然

通常所有非托管DLL都需要注册。如果fmod_event.dll不是安装包的一部分,请尝试在其上运行regsvr32进行注册。