求助关于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
[解决办法]
所以建议你动态调用啊,这样,你愿意咋改都行。
[解决办法]