2017-10-16 73 views
0

要求:加載一個C#DLL(其使用Emgu.CV.World.dll用於圖像 比較)到Python項目,並與一些 參數調用內部DLL功能。無法同時使用emgu CV爲x86平臺加載DLL cvextern

我試圖導出一個DLL usig Emgu.CV.World.dll進行圖像比較。編譯「任何CPU」目標時,DLL導出不起作用。變更爲x86平臺後,DLL從Python的正確加載:

mydll = ctypes.cdll.LoadLibrary(self.libPath) 

但同時調用DLL內函數:

ImageContentComparisonResult = mydll.CompareImageContent(self.OutputFile, self.OriginalFile) 

拋出以下異常:

WindowsError: [Error -532462766] Windows Error 0xE0434352 

Visual Studio輸出:

A first chance exception of type 'System.IO.FileNotFoundException' occurred in Unknown Module. 

在此之後,創建了一個示例Emgu.CV項目(GUI),得到了同樣的異常。在那裏,我得到異常的詳細信息,如

{"The type initializer for 'Emgu.CV.CvInvoke' threw an exception."} 
InnerException: {"Unable to load DLL 'cvextern': The specified module could not be found. (Exception from HRESULT: 0x8007007E)"} 

複製x86和x64的DLL的Emgu.CV爲「BIN \ 86 \調試」後,它的工作對示例應用程序,但對於非GUI C#項目,它甚至在複製所需的DLL後仍然無法運行。

+0

1)將_.dll_加載到進程中時,它們的體系結構必須匹配(_Python_體系結構在啓動第一條提示行後顯示),因此不需要_x86_和_amd64_版本。 2)我從來沒有嘗試過,但我確信你不能使用_ctypes_處理_C _ _ _ _ __(除非它有一個_C_接口,例如可以從_C_應用程序中使用)。同時發佈完整的代碼,而不僅僅是片段會有所幫助。關於最後一個錯誤,找不到_cvextern.dll_(** !!!或其某些依賴項!!! **)。 – CristiFati

回答

0

複製從\庫\ 64,我就是該庫:C:\ Emgu \ emgucv-windesktop_x64-CUDA 3.3.0.2826 \庫\ 64

0

C#DLL不會使用ctypes的加載。需要使用python包中包含的clr.AddReference方法。如果python 2.7正在使用需要卸載的clr包作爲2.7安裝的一部分(這是爲了避免命名空間衝突)。或者IronPython可以用於相同的。