在x86平台上使用emgu cv时无法加载dll cvextern

时间:2017-10-16 14:11:50

标签: c# python emgucv dllexport

  

要求:加载C#DLL(使用Emgu.CV.World.dll作为图像   比较)进入python项目并在DLL内调用一些函数   参数。

我尝试导出DLL使用Emig.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)"}

将Emgu.CV的x86和x64 DLL复制到“bin \ x86 \ Debug”后,它适用于示例应用程序,但对于非GUI C#项目,即使复制了所需的DLL,它也无法正常工作。

2 个答案:

答案 0 :(得分:0)

将libs从\ libs \ x64复制到我的:C:\ Emgu \ emgucv-windesktop_x64-cuda 3.3.0.2826 \ libs \ x64

答案 1 :(得分:0)

使用ctypes不会加载C#DLL。需要使用python包中包含的clr.AddReference方法。如果python 2.7正在使用需要卸载clr包,它是2.7安装的一部分(这是为了避免命名空间冲突)。或者也可以使用IronPython。