项目场景:
在Unity项目中使用了自己使用C++编译的Dll库文件,放置在Plugins文件夹下,然后再使用C#调用相应接口实现逻辑。
- Unity版本:2018.3.0 64位
- 目标平台:win10 64位
- dll开发语言:C++
- dll编译器:VS2017
C#调用相应接口的代码如下:
[DllImport("HumanPose")]
private static extern void RegisterDebugCallback(StringCallback callback);
[DllImport("HumanPose")]
public static extern int ARSetPath(string path);
[DllImport("HumanPose")]
public static extern void ARUnityTracking(IntPtr img_frame, int rows, int cols, int channels, ARBodyTrackingCallback callback, ARBodyDataClearCallback clearback, ARBodyFinishNotifyCallback finishback);
问题描述:
项目运行后不能正常运行,并报错,错误如下图:
根据报错的代码位置定位,可以找到,报错的代码如下:
int result = ARSetPath(path);
原因分析:
从上图的红色报错可以看出是DllNotFoundException,Dll未找到的错误,再ll配合上面显示的警告:Dll找不到指定的模块。网上经过搜索,得知问题是Dll所引用的其他的库你电脑上没有,本地电脑的环境问题,把相关的dll拷贝到系统目录或者特定的目录下就可以。
参考链接
- https://www.cnblogs.com/woodjay/p/12355190.html
- https://blog.csdn.net/qq_26483719/article/details/53518159
- https://blog.csdn.net/u012138730/article/details/82805138
解决方案:
下载一个Dependency Walker(Dependency Walker是一个PE模块依赖分析工具;PE模块,可移植Portable可执行程序),打开这个Dll,看看缺少什么库,把缺少的库放到C:/Windows/System32或C:/Windows/SysWOW64文件下。
另注:Dependency Walker功能的使用链接如下:https://www.jb51.net/softjc/388532.html