C# 运行时导入失败中的 C++ 非托管 DLL
C++ Unmanaged DLL in C# runtime import failure
我正在 运行使用 32 位架构在 Microsoft Visual Studio 2013 上构建一个 C# XNA 游戏项目。
尝试使用 DllImport
标记在 运行 时间加载非托管 C++ DLL 时,出现以下错误。请注意,此 dll (fmod_event.dll) 来自位于 /fmoddesignerapi/api/
下的 FMOD Ex Programmer’s 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添加到项目的根目录,并设置为'Copy if newer'。我可以确保此 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 都需要注册。如果你得到的 fmod_event.dll 不是安装包的一部分,请尝试 运行 regsvr32 对其进行注册。
- 指定 .DLL 作为扩展名
- 确保文件存在于 PATH 中,或在
DllImport
中指定完整路径
- 检查此 DLL 是否存在 依赖模块 。使用 Dependency Walker 查找依赖 DLL 是否存在,以及是否可加载。
- 检查 32 位和 64 位问题。 32位的进程不能加载64位的DLL,反之
我正在 运行使用 32 位架构在 Microsoft Visual Studio 2013 上构建一个 C# XNA 游戏项目。
尝试使用 DllImport
标记在 运行 时间加载非托管 C++ DLL 时,出现以下错误。请注意,此 dll (fmod_event.dll) 来自位于 /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添加到项目的根目录,并设置为'Copy if newer'。我可以确保此 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 都需要注册。如果你得到的 fmod_event.dll 不是安装包的一部分,请尝试 运行 regsvr32 对其进行注册。
- 指定 .DLL 作为扩展名
- 确保文件存在于 PATH 中,或在
DllImport
中指定完整路径
- 检查此 DLL 是否存在 依赖模块 。使用 Dependency Walker 查找依赖 DLL 是否存在,以及是否可加载。
- 检查 32 位和 64 位问题。 32位的进程不能加载64位的DLL,反之