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

C++;C#运行时导入失败中的非托管DLL,c#,c++,dll,xna,fmod,C#,C++,Dll,Xna,Fmod,我正在Microsoft Visual Studio 2013上运行一个使用32位体系结构的C#XNA游戏项目。 当试图在运行时使用 DLimPult标签加载非托管C++ DLL时,我会得到以下错误。请注意,此dll(fmod_event.dll)来自位于/fmoddesignerapi/api下的/ “System.DllNotFoundException”类型的未处理异常。 其他信息:无法加载DLL“fmod_事件”:找不到指定的模块。(HRESULT异常:0x8007007E) 代码已被跟

我正在Microsoft Visual Studio 2013上运行一个使用32位体系结构的C#XNA游戏项目。 当试图在运行时使用 DLimPult标签加载非托管C++ DLL时,我会得到以下错误。请注意,此dll(fmod_event.dll)来自位于/fmoddesignerapi/api下的/

“System.DllNotFoundException”类型的未处理异常。
其他信息:无法加载DLL“fmod_事件”:找不到指定的模块。(HRESULT异常:0x8007007E)

代码已被跟踪,并且在导入过程中失败

[DllImport("fmod_event")]
private static extern RESULT FMOD_EventSystem_Create(ref IntPtr eventsystem);
我已将dll添加到项目的根目录中,并将其设置为“如果更新,则复制”。我可以确保这个dll存在于调试和发布bin文件夹中的正确位置

当通过相同的下载文件导入位于/api/I下的“fmodex.dll”时,不会遇到相同的问题,并且使用以下代码一切正常:

[DllImport("fmodex")]
private static extern RESULT FMOD_System_Create(ref IntPtr system);
在同一个bin文件夹下可以看到这两个DLL。
我尝试使用fmod_event.dll 32和64,但没有任何运气


任何人都可以提供任何洞察为什么一个DLL加载正确,而不是另一个?谢谢

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

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

这不是真的,除非非托管/本机DLL是COM,并且有人正在使用COM。此外,即使regsvr32工作,因为模块包含
DllRegisterServer
导出,这意味着它是COM服务器,因此您不需要DllImport任何东西。你只需要使用COM。除了作为COM服务器外,模块很少包含一组导出。fmod_event.dll是否有任何导入工作?能否确认这两个DLL立即位于调试或发布文件夹中?为什么你需要将它们复制到子文件夹中?你看过这个网站吗:我倾向于不从未知来源下载DLL。这非常奇怪,但你修复了它。我确实必须为fmod_事件1指定.DLL。但另一个DLL似乎不受它的影响。谢谢:)