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

标签 c# c++ dll xna fmod

我正在使用 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/

相关文章:

c# - 如何在保留行尾的同时拆分字符串?

c++ - 如何在带有密码身份验证的 linux 中以 root 身份使用 C 或 C++ 运行没有 pam 的命令

c++ - std::bind 如何按值获取可变参数,即使它具有通用引用?

c# - 从子程序集中读取父 Silverlight 项目的文件夹结构

c# - ISEXP : warning : -6248: Could not find dependent file libc. dll,或其组件的依赖项之一

.net - 如何判断 DLL 是否为 ComVisible?

c# - ASP.NET 默认 _LoginPartial View 中的一个小改动不起作用

c# - 取消引用可能的空引用 C#

c# - Winforms 格式化文本框为货币

c++ - 判断指针的类型