BCB2010使用VC开发的动态库问题
用VC做了一个动态库(.dll和.lib),动态库中导出了一个类,在bcb2010中如下调用:
#include "XDBX2XML.h"
#pragma comment(lib,"XdbxParse.lib")
XDBX2XML xdbx2xml(buf,cnt);//XDBX2XML是导出的类名
链接错误:
[ILINK32 Error] Error: Unresolved external '__stdcall XDBX2XML::XDBX2XML(void *, int)' referenced from D:\PROJECTS\BCB\XDBXPARSETEST\DEBUG\UNIT1.OBJ
[ILINK32 Error] Error: Unresolved external '__stdcall XDBX2XML::~XDBX2XML()' referenced from D:\PROJECTS\BCB\XDBXPARSETEST\DEBUG\UNIT1.OBJ
但如果在vc工程中使用此动态库就没有问题!哪位大侠知道怎么解决??
[解决办法]
vc和bcb真不是一家的,vc生出的库是coff格式的,bcb生出的库是omf格式.
不好通用啊.
[解决办法]
不要跨编译器使用dll导出的class
[解决办法]
说明你这个Lib还是不对的,用implib自己从dll中导出一个lib文件,然后再添加到工程中去试。
[解决办法]
C++已经够复杂了,不要再用这种方式折磨自己。
VC和BCB类的成员变量内存布局、虚函数表实现可能都不一样,连成员函数调用约定,VC默认是thiscall,BCB默认应该是__cdecl。
或许真的有办法可以在dll中导出类跨编译器使用,但你要遵守一堆原则,绕过一个个大坑,值得这么做么?
跨编译器dll尽可能使用纯粹的C函数调用,这样不用考虑那么多原则与大坑。
如果你非得坚持这么做,建议做成COM组件,彻底把类实现隐藏在dll中。