C#(U3D)读取DLL的坑(我感觉以后会继续遇到这个问题)

重新整理一遍

在这里插入图片描述
DLLNotFoundException 的原因包括:

[DllImport("XXX.dll", EntryPoint = "?Test@@ABBCDDEFF@Z", ...
// "XXX.dll" 应该直接输入"XXX"

在这里插入图片描述Failed to load … expected x64 but was x86 的解决办法是:
3个办法

在这里插入图片描述
EntryPointNotFoundException 的原因包括:

[DllImport("DLL", EntryPoint = "?Test@@ABBCDDEFF@Z", ...
// "?Test@@ABBCDDEFF@Z" 错误

在这里插入图片描述
崩溃,代表已经运行到dll里面,是dll的问题,原因分别是:

  • 路径 /\引起的问题。
  • 在dll里面输出的log导致一个io的问题
  • 服务器端防火墙没关

================================
在这里插入图片描述
一开始我遇到的是这个DllNotFoundException: OuterApi.dll(TouchScript那个不用管,它就是什么报错它就跟着一起报的嘤嘤怪)
然后我对报错的那一行做了个Try Catch,然后… 就从一个报错变成了三个报错…
在这里插入图片描述
新的问题出现了,原来是因为Failed to load dll expected x64,就是64位U3D读取不了32位的DLL,然后网上找到的3个办法里面,后两个我都试过了,实在是没有办法就向上级同事求助,把32位的DLL换成64位。

换了,然后把try catch删了,跑一遍。

在这里插入图片描述

从DllNotFoundException: OuterApi.dll变成了EntryPointNotFoundException了…无奈
原本我感觉我好像一层一层剥开洋葱,现在我觉得这是个套娃…

然后找出问题在于dll那边换成64位之后命名出错导致 EntryPointNotFoundException。
解决了这个问题之后终于不报错了。改为崩溃了。
在这里插入图片描述
后来排查了一下,一个还是dll那边的问题,另一个是因为路径 /\引起的问题。
解决了之后大家都以为可以了,结果又回到了DllNotFound,而这次肯定是64位,而且尝试try catch之后还是只有这一个问题。
目前怀疑是部分编译的问题,尝试修改成全编译。
还有一种可能就是[DllImport("XXX", ...里面的.dll忘了删,变成了[DllImport("XXX.dll",,修复一下即可。

解决

小番外:
Dll在调试的时候没有问题,但到了U3D环境下就出问题,但在U3D上面并不能显示Dll中的console.line。这个时候解决方法可以指定将Dll的log打印在E:\的文件夹里面生成新的txt。

猜你喜欢

转载自blog.csdn.net/MikeW138/article/details/105706206