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的方法可以参考这里

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值