首页 > 代码库 > C#解决“Emgu.CV.CvInvoke”的类型初始值设定项引发异常 的其中一个办法

C#解决“Emgu.CV.CvInvoke”的类型初始值设定项引发异常 的其中一个办法

首先要说明的是为什么说是"其中一个办法", 因为引起这个问题的理由有好多个, 这里只提我遇到的一种.

我遇到这个问题的根本原因是EmguCV和OpenCV版本不匹配

这里我重现一下找到原因的过程:


1. 运行程序直接崩溃, 然后debug时找到了在这里崩溃的:

技术分享

技术分享

2. 查看详细信息, 点看左边的小三角, 发现了根源:

技术分享技术分享

上面有一句: "{"无法加载 DLL“opencv_core231”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。"}"

从网上下一个opencv_core231.dll放到debug文件夹中可以解决问题, 但毕竟不是长久之计.


3. 然后我就想了, 为什么会缺少231呢, 我的emgu应该对应290呀, 于是我重新点开引用添加界面, 

技术分享技术分享

发现问题了! 最近添加里有两批EMGU的dll, 一批是2.9的, 一批是2.3的, 我正是引用了2.3的才出现了这种错误, 估计是我下了别人的程序, 把别人旧版本的emgu的dll引用进来了吧.

把2.9的引用进来就解决问题了.


最后要说的是OpenCV版本和EmguCV版本有什么关系, 因为C#计算是比较慢的, 要想加速底层计算还得用C++等语言来处理, 于是有些EmguCV函数是要调用OpenCV库的,一般一个EmguCV版本对应一个OpenCV版本.


C#解决“Emgu.CV.CvInvoke”的类型初始值设定项引发异常 的其中一个办法