我正在使用 32 位架构在 Microsoft Visual Studio 2013 上运行 C# XNA 游戏项目。
尝试使用 DllImport
标记在运行时加载非托管 C++ DLL 时,出现以下错误。请注意,此 dll (fmod_event.dll) 来自 FMOD Ex Programmer’s API位于/fmoddesignerapi/api/下
An unhandled exception of type 'System.DllNotFoundException'.
Additional information: Unable to load DLL 'fmod_event': The specified module could not be found.(Exception from HRESULT: 0x8007007E)
代码已遵循,但在导入过程中失败。
[DllImport("fmod_event")]
private static extern RESULT FMOD_EventSystem_Create(ref IntPtr eventsystem);
我已将 dll 添加到项目的根目录并将其设置为“如果更新则复制”。我可以确保此 dll 存在于 DEBUG 和 RELEASE bin 文件夹中的正确位置。
当通过相同的下载文件导入位于/api/下的“fmodex.dll”时,我没有遇到同样的问题,使用以下代码一切正常:
[DllImport("fmodex")]
private static extern RESULT FMOD_System_Create(ref IntPtr system);
这两个dll都可以在同一个bin文件夹下看到。
我曾尝试使用 fmod_event.dll 32 和 64,但没有任何运气。
任何人都可以深入了解为什么一个 DLL 加载正确,而另一个 DLL 加载不正确吗?谢谢
最佳答案
- 将.DLL 指定为扩展名
- 确保文件存在于 PATH 中,或在
DllImport
中指定完整路径 - 检查此 DLL 是否存在依赖模块。使用 Dependency Walker 查找依赖 DLL 是否存在以及是否可加载。
- 检查 32 位和 64 位问题。 32位的进程无法加载64位的DLL,反之亦然
关于c# - C# 运行时导入失败中的 C++ 非托管 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36402176/