DllNotFoundException

最近在使用Unity调用C++的dll的时候出现了dllNotFoundException的报错,但是我明明在对应的路径放到了相应的dll,在这里总结一下解决错误的几种方法:

一. 检查运行dll是否需要其他的dll
不仅仅是适用于Unity,大多数dll的运行是需要其他dll的支持的,所以有时候会出现在电脑A上能运行该dll,但是换一台电脑就找不到对应的dll的情况,这个时候可以下载对应的工具Dependency Walker,该软件可以用来查找exe和dll需要的关联文件,可以在这里下载https://www.dependencywalker.com/,下载后打开exe,直接在file里打开该dll,然后查看下面显示缺失的dll,找到后补上该dll即可。

具体Dependency Walker的使用方法可以自行百度,这里提一点重要的信息,由于Dependency Walker有很久没有进行更新维护了,所以一些老的dll可能是Windows7这种老系统使用的dll,如果显示API-MS-WIn-Core类似的dll缺失,也属于正常情况,可以不用管它,具体可以忽略的dll格式如下:
API-MS-WIN-.dll
EXT-MS-WIN-
.dll
IESHIMS.dll
EMCLIENT.dll
DEVICELOCKHELPERS.dll

如下图所示是正常的:
在这里插入图片描述
更多dll信息可以参考:https://ofekshilon.com/2016/03/27/on-api-ms-win-xxxxx-dll-and-other-dependency-walker-glitches/

二. 检查自己的dll对应的平台是不是对的
比如自己用的软件是64位的,那么就要使用对应平台的dll,而且最好是用Release版本的,Debug版本的可能会出问题。

三. 检查自己路径和对应的代码有没有写错
比如在Unity中使用,必须把对应的dll放在Assets目录下的Plugins文件夹下,64位的dll放在Plugins的x64文件夹(文件夹叫x86_64也可以)内,32位的放在x86文件夹内,再比如在C#中写[DllImport("dllName", EntryPoint = "function")]的时候,dll的名字后面不要加.dll。
具体操作可以参考这里

四. 可能是dll内部本身有问题
比如我实际使用中,先是显示两条Warning,Plugins:Falied to load ' Assets/Plugins/x64/Debug/myDLL.dll' with error' 动态链接库(DLL)初始化例程失败, 然后报错DLLNotFoundException,这个时候其实不是DLL找不到,而是dll在初始化的时候报错了,Unity这里还是有点坑的,因为一但出问题,它只会报DLLNotFoundException,然后我从Unity这边调试我的dll,果然发现是static成员的构造过程中出现了错误,具体从Unity调试C++dll的方法可以参考这里

如果以上办法都不能解决,可以参考以下链接:这里

引用\[1\]:在C#工程中,当调用某个DLL文件时,可能会出现System.DllNotFoundException异常,提示找不到指定的模块。这个问题通常是由于DLL文件缺失或者引用的DLL文件与程序的目标平台不一致所导致的。为了解决这个问题,可以使用依赖分析工具来分析缺少的DLL文件,并下载相应的DLL文件。\[1\] 引用\[2\]:另外,如果出现System.BadImageFormatException异常,可能是由于引用的DLL文件的系统平台与程序的目标平台不一致所导致的。在C#程序中,可以通过选择项目属性中的目标平台来设置程序的目标平台。确保程序的目标平台与引用的DLL文件的系统平台一致,可以解决这个问题。\[2\] 综上所述,当出现C#的System.DllNotFoundException或System.BadImageFormatException异常时,可以通过以下步骤来解决问题: 1. 使用依赖分析工具来分析缺少的DLL文件,并下载相应的DLL文件。 2. 确保程序的目标平台与引用的DLL文件的系统平台一致,可以通过选择项目属性中的目标平台来设置程序的目标平台。 希望以上信息对您有帮助。如果还有其他问题,请随时提问。 #### 引用[.reference_title] - *1* *2* *3* [C# System.DllNotFoundException 解决之路无法加载DLL“xxxx”:找不到指定的模块(异常来自HRESULT:0X...](https://blog.csdn.net/kevinshift/article/details/89792398)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值