先看文章最后一句话
1.问题一:无法加载DLL,找不到指定的模块
解决办法:把你用的dll放在你自己程序的启动路径下。比如bin/debug/....或者x64/debug/.....
如果不知道应该放哪里,就都试试哪个文件夹都试试,再一个一个删除,看看哪个会影响程序运行,就是这个文件夹了
问题二:试图加载格式不正确的程序
解决办法:因为平台设置不正确,看看你的平台是什么,跟编译dll的平台一样吗?
核对:(C#配置和C++)代码配置
如果发现自己编译的opencv的c++代码是x64的而c#程序不能用x64,那就只能重新编译一个win32的x86或者win32的win32程序。注意编译dll前需要配置win32也就是x86版本的opencv,具体配置方法和x64的配置方法一样,只是要选择x86的文件夹下的bin进行配置,然后再编译dll(参考配置x64配置自己的x86)。请注意:有的opencv自带x86版本,如opencv2.4.13,有的只有x64版本,需要自己用Cmake编译,还要注意配置时候自己VS选择的版本。然后将引用dll的c#程序加一句话,如下:
[DllImport("PackageDll.dll", EntryPoint = "CutPic", CallingConvention = CallingConvention.Cdecl)]
public static extern bool CutPic(string path);
C#默认调用的是__Stdcall
问题三:外部组件发生异常
解决办法:单步调式,看是不是参数传错了,看是不是找不到要处理的文件,看是不是C++和C#的传参值有问题(如C#用string类型,C++的形参要用char *)
问题四:.NETFramework,Version不匹配问题
解决办法:在启动程序的app.config文件中加入运行时动态变化.NETFramework,Version版本,如:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
<supportedRuntime version="v2.0.50727"/>
</startup>
x86版本示例:https://download.csdn.net/download/qq_40155090/12004885
切记:代码执行的时候,要重新生成解决方案,每次改东西都重新生成,即使改传入的参数,也要重新生成解决方案,很重要、很重要、很重要