一、故障分析:
C#编译正常,运行过程中报错,现象如下:
针对异常情况,做故障分析:
1.C++编译的dll正常,C#编译正常;
2.对加载的dll路径,做了反复检查,确认路径无问题;
通过c#代码 ,测试加载dll时的当前路径:
string s = "sfdsa";
System.IO.File.AppendAllText("../../aaa.txt", s);
根据生成的文件,确认当前路径;排除dll放置的路径问题。
经查资料,加载的c++生成的dll,如果其依赖其他dll,而所依赖的dll不在当前运行环境,也会保此种异常。
二、故障解决:
查询c++生成的dll,依赖其他什么dll:
查询方法一:利用vs子自带工具:VS 2017的 x64_x86 交叉工具命令提示符
打开进入cmd模式,找到C++的dll路径,通过命令:
dumpbin /dependents 需要检测的.dll
可以查询到,其依赖的所有dll,逐个拷贝出来。
查询方法二:利用专门的查询软件dependency Walker
导入需要查询的dll即可,该软件查询到dll依赖的其他dll,会提供所在路径,逐个拷贝出来。
把依赖的其他dll,放置在C#生成运行程序的搜寻路径中(比如和C#生成的exe同一目录,或其指定的搜索路径中);