Win8 系统下OpenCV + C++ 封装DLL在64位Win7系统下不可用的问题解决

1、问题背景:

win8系统中,在vs2012环境下写的C++程序,其中调用了OpenCV库中的函数,封装成 dll 后在 win8 系统下可以正常使用。

封装 dll 时项目编译平台为x86. 当在win7系统下调用该dll时,出现了“试图加载格式不正确的的程序。 (异常来自 HRESULT:0x8007000B)”。

然后把封装dll的源代码拷到win7系统下,发现不能运行了。提示“应用程序无法正常启动(0xc000007b),请单击确定关闭应用程序”,如下图所示。


2、解决思路:

在网上查找该问题的原因,原因有多种:
1)封装dll时,编译器选择了64位的,而调用该dll的系统是32位的。
于是再次确认win8与win7都是64位的系统,vs中选择的编译器选择的是win32, 因此封装的 dll 原则是在32位系统和64位系统中都是可以调用的。
2)可能是间接引用了其它的 dll 库,而在系统中没有找到,或者引用了错误的dll,比如本该引用32位的但实际引用了64位的,或者本该引用64位但实际引用了32位的。
为了更好的知道间接引用了哪些dll, 可以用工具Dependency Walker来分析所引用到的dll。该工具会列出所有引用到的系统dll和第三方dll, 并且会在缺少的dll前显示问号
如下图PLATERECOGNITIONDLL.DLL引用的OpenCV的dll有4个,系统dll有3个。


3、解决方案:

如果是第一种原因引起的,则选择对应的编译器重新编译生成所需位数的dll即可。
如果是第二种原因引起的,则将缺少的dll补上,放在指定的路径下即可,并且要注意dll的放置路径。
 
注意:在64位的win7系统中,系统dll的存放路径是C:\Windows\SysWOW64。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值