OpenCV MPR.DLL WNetRestoreConnectionA相关问题

本文转自http://lhf.is-programmer.com/posts/11996.html

作者:LiHengFeng

最近在搞opencv。有个问题连续搞了两次,本来已经搞好了,过了个国庆,回来全忘了,结果又搞了大半天。最后终于发现之前已经搞过一次了。现在记下来,以免再搞第3次。

是这样的。我的工程(vs2005,MFC)使用了cv110.dll,cxcore110.dll 两个opencv的库。在公司的机器上运行正常,拷到家里的机器就不能初始化。运行就报错误"应用程序正常初始化(0xc0150002)失败..."。

 使用depends.exe查看,发现工程的exe使用了MFC80U.dll,它又使用了SHLWAPI.dll,后者使用了MPR.dll,该dll有个输出函数WNetRestoreConnectionA无法定位,导致程序初始化失败.

这里MPR.dll是个延迟加载的dll,按理来说,只要不真实调用该函数就没有问题.但现在的情况是我的工程代码中肯定没有调用MRP.dll中的任何输出函数,但程序却挂了.看来比较奇怪。网上搜了一把,发现有说静态链接MFC的。好像有点道理,本来没有使用这个函数,如果静态链接的话,就应该绕过了MFC80U.dll,因此也就没有MPR.dll。结果一试,不行。反复折腾了好几个小时,最后都想重装系统了(我家里的xp+sp2,公司的xp+sp3)。也想过下载个mpr.dll。最后终于想起来,好像以前搞过类似的问题(唉,就在几天前,都忘了)。

原来不是MFC80U.dll的事,是opencv的dll。CXCORE110.DLL使用了ADVAPI32.DLL(主要是注册表相关函数)。调用关系依次是:

SECUR32.DLL-->NETAPI32.DLL-->DNSAPI.DLL-->IPHLPAPI.DLL-->

MPRAPI.DLL-->SETUPAPI.DLL-->SHLWAPI.DLL-->MPR.DLL

那剩下的事就好办了。opencv是开源的嘛,有源代码的。只要找到相关代码,注释掉就好了。代码在 ...cxcore\src\cxswitcher.cpp中。把函数icvInitProcessorInfo注释掉就好了。当然如果你需要cpu信息方面的功能,就没这么省事了。我就简单的这么处理了。编译后,替换原来的两个dll,运行后,ok。

 这里其实还有几个问题没有搞清楚,等哪天有时间了再研究。现在先这么解决一下,能用就行。

 

以下为补充内容:

Why am I seeing a lot of applications where MPR.DLL shows up in red under SHLWAPI.DLL because it is missing a function named WNetRestoreConnectionA? I also get a "Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module" message.

Some versions of SHLWAPI.DLL (like the one on Windows XP) have a delay-load dependency on the function WNetRestoreConnectionA in MPR.DLL. Missing delay-load functions are not a problem as long as the calling DLL is prepared to handle the situation. Dependency Walker flags all potential problems as it cannot detect if an application intends to handle the issue. In the case of SHLWAPI.DLL, this is not an problem as it does not require WNetRestoreConnectionA to exist and handles the missing function at runtime. This warning can be ignored. See the "How to Interpret Warnings and Errors in Dependency Walker" section in help for more details.

来源:https://www.sogou.com/link?url=DSOYnZeCC_pFLs-MkO838wzYlSyTimjHoytwuCd8bLVI8gIG7te3qa3mlRzfPLR2

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值