解决在调用第三方dll时因为runtime library不一致导致调用失败的方法
来源:互联网 发布:广东11选5当前遗漏数据 编辑:程序博客网 时间:2024/05/22 14:28
情境重现: 我在自己写的一个dll中调用第三方dll。
调用方式:显式调用。
第三方dll是否完整: 不完整。 如何判断不完整: 使用dependency walker 打开第三方dll时出现提示:
打开dependency walker 下方的log window 获得如下图所示结果:
对于dll中的warning 我们可以不关注,但是若出现error 则会严重影响到该dll在其他环境中的使用。
有关error信息 side-by-side configuration contains errors 参看我的日志http://blog.csdn.net/xxxwrq/article/details/8738024 (该日志是基础,我们需要懂一些东西)。
接下来我们就去分析该dll.
使用vs2005打开该dll 。
打开RT_MANIFEST目录下的2 得到以下视图:
可以看到有两个依赖程序集(dependency assembly) 分别是 microsoft.vc80.crt 和 microsoft.vc80.mfc 其版本均为 8.0.50727.6195.
因而我们去找到这两个文件。
最终我们在以下路径C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT ,
C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.MFC
分别找到了我们所需要的东西:
在side-by-side configuration error文章中我曾提到在manifest文件中会有一些提示之类的东东。
然后我们打开了该Microsoft.VC80.CRT.manifest 和 Microsoft.VC80.MFC.manifest文件 发现如下内容:
可以看到 Microsoft.VC80.CRT的版本号是 8.0.50608.0 与上文中提到的dll需要的版本号不一致。这个后果非常严重,直接导致dependency walker打开该dll时出现错误,以及在实际调用它时出现错误。 那我们的解决方法
想办法升级该dll,或者ATL 使他们版本一致。 升级ATL的梦想变得奢侈。因而没萌实现,求实现。
在尝试使用redist_x86.exe解决这个问题时依然没有解决。
在经历无数次失败后, 提出如下解决方案最终将问题解决:
1 将如下两文件夹下的所有文件打包复制到程序的执行目录下:
C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT ,
C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.MFC
2 将该两个manifest中的version修改为第三方dll中依赖项的version号。
然后,问题终于解决了!!
最终发现上述两个文件夹下的好多东西没有用,但是唯独不能缺少的东西是两个manifest以及一些dll。
- 解决在调用第三方dll时因为runtime library不一致导致调用失败的方法
- JNI 调用第三方dll 报错 RUNTIME ERROR R6031
- java 调用第三方dll
- jni 调用第三方dll
- unity3d调用第三方dll
- Android调用第三方库的方法
- swift 调用第三方的oc 方法
- java调用c++的第三方dll动态库详解
- Java 如何调用第三方 *.dll
- 调用第三方dll中的com接口
- java 调用第三方dll学习心得
- VB6.0 调用第三方dll
- jni 调用第三方dll学习心得
- installshield调用第三方dll文件
- java 调用第三方dll学习心得
- java调用第三方dll文件心得
- VB6.0 调用第三方dll
- java调用第三方dll中函数
- Winpcap的安装使用方法
- timyxml的简单使用
- struts2标签详解
- Android - Layout 也是 View
- centos ve12.05启动vm失败
- 解决在调用第三方dll时因为runtime library不一致导致调用失败的方法
- C++的函数重载
- SWT中调用SetLayout 遇到ClassCastException: GridData cannot be cast to RowData 问题调查
- struts标签小结
- jQuery对象与dom对象的转换
- 嵌套定义
- SQL 优化之该走索引却不走索引的分析(二)
- 认识静态链接库和linux下的创建
- HDU2964Prime Bases简单数学题