先看文章最後一句話
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
切記:代碼執行的時候,要重新生成解決方案,每次改東西都重新生成,即使改傳入的參數,也要重新生成解決方案,很重要、很重要、很重要