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,反之