[EmguCV]CvInvoke的型別初始化設定發生例外 (CvInvoke TypeInitialization Exception) 處理

在安裝篇,我們介紹了如何安裝EmguCV到你的Visual Studio上,但是有時候當你一切都準備就緒,要開始執行範例程式時,你可能會遇到編譯器跳出CvInoke的型別初始化設定發生例外 (CvInvoke TypeInitialization Exception) 的問題,但是又不知道如何去修改他



本篇的文章除了希望介紹給遇到CvInoke 例外問提的朋友們一個快速地排除方法之外,也是我們一個筆記,自從知道這問題後,即便再次遇到也可以快速排除

前言

 


 

安裝篇,我們介紹了如何安裝EmguCV到你的Visual Studio上,但是有時候當你一切都準備就緒,要開始執行範例程式時,你可能會遇到編譯器跳出CvInoke的型別初始化設定發生例外 (CvInvoke TypeInitialization Exception) 的問題,但是又不知道如何去修改他

 

本篇的文章除了希望介紹給遇到CvInoke   例外問提的朋友們一個快速地排除方法之外,也是我們一個筆記,自從知道這問題後,即便再次遇到也可以快速排除

 

CvInvoke 型別初始化設定發生例外 (TypeInitialization Exception )

 


 

其實這個例外會出現的原因基本上只有兩大個而已,就是「發布平台與安裝的EmguCV開發版本平台是否一致」 與 「CvInvoke類庫有無參考到openCV動態函式庫」

每次遇到這個問題也都是這兩個原因之一

 

以下是CvInvoke 型別初始化設定發生例外圖示:

cvinvoke_typeinitialization_exception

 

 

原因一:發布平台與安裝的EmguCV開發版本平台是否一致

如果因為電腦平台是x64架構而下載的是x64版本的EmguCV,或是 打算開發x64架構,請記得在debug或是release把平台也改成x64,不同的版本,會出現此例外問題

x64_platform

 

原因二:CvInvoke類庫有無參考到openCV動態函式庫

CvInvoke裡面提供了很多影像處理的基本方法,並且他們全部都是接自openCV的DLL函式庫,如下圖擷取自EmguCV官網

並且,如果你親自去看的話也會發現其實裡面也呼叫openCV的函式庫方法來做處理;通常有可能是因為沒有把這些參考路徑加入到專案中,所以讓專案在執行時找不到(此問題和原因一無關聯,即便你是下載x86版本,如果沒有注意到這部分也會發生例外)

cvInvoke

 

所以要確認是否在安裝EmguCV時,有把OpenCV的DLL加入參考路徑(例如x86版本會在在EmguCV的\bin\x86底下有)

基本上這部分如果以照著安裝篇來做就不會發生,因為參考路徑已經提到如何加入。

 

但是通常為了直接測試,建議可以直接在專案中加入openCV的DLL檔案,把\bin\x86中的dll加入到專案中,並選擇屬性永遠輸出,

1. 專案右鍵->加入現有項目->加入\bin\x86下的opencv dll(2.4.0為例可加入opencv_core240.dll與opencv_imgproc240.dll,其餘的依需求加入)

Add openCV

 

2.加入後對DLL右鍵->屬性->複製到輸出目錄改成永遠輸出

always output

 

然後編譯執行,他就會把檔案複製到輸出目錄直接從那邊找到參考路徑,也就不會有例外發生

 

 

結論

 


 

以上就是本人通常遇到此問題的快速排除方法,希望遇到的人也可以透過這篇排除問題而有幫助到

 

參考資料

Setting up EMGU C Sharp

 


 

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)

另外要轉載請附上出處 感謝