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程序员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文件夹中的正确位置。
当通过相同的下载文件导入位于/api/I下的"fmodex.dll"时,不会遇到相同的问题,并且使用以下代码一切正常:
[DllImport("fmodex")]
private static extern RESULT FMOD_System_Create(ref IntPtr system);
这两个dll都可以在同一个bin文件夹下看到
我曾尝试使用fmod_event.dll 32和64,但没有任何运气。
有人能深入了解为什么一个DLL加载正确,而另一个加载不正确吗?感谢
- 指定.DLL作为扩展名
- 确保文件存在于PATH中,或在
DllImport
中指定完整路径 - 检查此DLL是否存在依赖模块。使用依赖项Walker来查找依赖DLL是否存在并且是否可加载
- 检查32位和64位问题。32位进程无法加载64位DLL,反之亦然
通常所有非托管DLL都需要注册。如果fmod_event.dll不是安装包的一部分,请尝试在其上运行regsvr32进行注册。
相关文章:
- 挂起和取消挂起一个文件DLL
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- C++:将外部库链接到dll库
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 不同的Visual Studio版本中缺少.dll
- 从DLL中删除类的实例
- 如何包装第三方DLL在R中使用
- 使用c#访问c++dll中带有char*参数的函数时发生AccessViolationException
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Python ctypes:不会按预期加载 dll
- 在 C++/CLI 中将 .NET 事件从一个 DLL 引发到另一个 DLL