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

时间:2016-04-04 12:06:16

标签: c# c++ dll xna fmod

我使用32位架构在Microsoft Visual Studio 2013上运行C#XNA游戏项目。 尝试使用DllImport标记在运行时加载非托管C ++ DLL时,我收到以下错误。请注意,此dll( fmod_event.dll )来自位于/ fmoddesignerapi / api /

下的FMOD Ex Programmer’s 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文件夹中,位于正确的位置。

导入' fmodex.dll'通过相同的下载文件提供,位于/ api /我不会遇到同样的问题,所有内容都按预期工作,代码如下:

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

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

任何人都可以提供有关为什么一个DLL正确加载但不能正确加载的原因吗?感谢

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:-1)

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