检查运行dll是否需要其他的dll

这个是报错比较常见的原因。
在Unity中报DllNotFoundException有可能是找不到的dll,它需要引用的其他dll不存在。

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

iOS 引入的UnityFramework一直找不到 unity 找不到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

如下图所示是正常的:

iOS 引入的UnityFramework一直找不到 unity 找不到dll_Dependency_02


这里需要其他dll,可能放在系统盘目录下,也可能只需要放到工程目录下,我遇到的情况是要放工程目录下的,就是Assets/Plugins/x64下面。

Dependency Walker 使用方法说明

另外说一下查看dll是64位还是32位的方法以及对应的坑

iOS 引入的UnityFramework一直找不到 unity 找不到dll_c#_03

打开这里 输入

dumpbin -headers "D:\Unity Projects\Formal\NzviewerFJ\nzviewerfj\Assets\Plugins\x64\avdevice-57.dll"

iOS 引入的UnityFramework一直找不到 unity 找不到dll_unity_04

得到的结果

最后一个是路径,亲自测试过,要注意这个黑窗口如果用箭头上键找到上次执行的命令,再执行,
即使相同的路径下的dll已经更换,但是执行的依然是手打输入时候的结果。所以如果想偷懒还是将命令复制到记事本,然后更换相同文件夹的下的dll,然后再粘贴再执行,得到的信息就是更换后的dll了。

检查自己的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成员的构造过程中出现了错误

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