首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于C++ builder 和 VC的兼容性有关问题

2012-09-13 
求助关于C++ builder 和 VC的兼容性问题现在有一个c++Builder程序A, 其源代码在下述实验中不做改变。A 调用

求助关于C++ builder 和 VC的兼容性问题
现在有一个c++Builder程序A, 其源代码在下述实验中不做改变。

A 调用VS编译生成的 dll B, B有两个版本 B1 和B2. B2 比B1在导出函数方面有所改变,比如删除或者增加了一些导出函数。
 但是其中,A调用的导出函数在B1 和 B2中均有导出。


现在发现有如下现象,很是怪异。

A 在编译时使用B1.lib, 编译的A.exe程序调用B1.dll时正常工作,调用B2.dll时,A.exe会抛出异常。
A 在编译时使用B2.lib, 编译的A.exe程序调用B2.dll时工作正常,调用B1.dll时,A.exe会抛出异常。

(B1.lib 和 B2.lib 均为IMPLIB.EXE将B1.dll 和 B2.dll转换后的lib库,以供BCB编译的程序使用)

求解 这是为啥。



[解决办法]
这个出错很正常了,你用B1.lib去调用b2.dll或者B2.lib调用B1.lib,导出函数的地址不一致造成的。

改用动态调用即可:
 
LoadLibary(),GetProcAddress().

[解决办法]
如果用静态调用的话,B1.dll和B2.dll的函数序号必须是一致的,要不然用Vc同样出错。
[解决办法]
楼上正解,这就是所谓的DLL Hell
[解决办法]
所以建议你动态调用啊,这样,你愿意咋改都行。
[解决办法]

探讨
楼上正解,这就是所谓的DLL Hell

热点排行