C++Builder及VC的DLL相互调用解决方案

C++Builder及VC的DLL相互调用解决方案

由于MS和Borland(CodeGear)两家的编辑器实现细节不同,造成了它们生成的DLL不能相互通用,因此给实际带来了很多的麻烦。下面来说一说如何解决这个问题。

 VC生成DLL,C++Builder调用

1、用extern "C"修饰VC导出的DLL函数。如:extern "C" __declspec(dllexport) int aFunc(int a); 
2、用C++Builder的implib工具生成DLL对应的lib文件。如:implib -a xxx.lib xxx.dll(注意,implib一定要带-a开关)。生成lib文件之后,C++Builder便可以使用这个lib文件了。 

C++Builder生成DLL,VC调用

1、用extern "C"修饰C++Builder导出的DLL函数。如:extern "C" __declspec(dllexport) int aFunc(int a); 
2、用C++Builder的impdef工具生成DLL对应的def文件。如:impdef xxx.def xxx.dll。 

说明:

1)impdef.exe是C++Builder自带的工具,在安装目录可以找到它;

2)将impdef.exe单独拷贝到一个文件夹,拷贝待转换的dll文件到这个目录;

3)在这个目录下,新建一个bat文件,输入 impdef XXX.def XXX.dll(XXX为待转换文件名)

 

3、用记事本打开xxx.def文件,删去每个函数名前的"_"。如原来的def文件为: 
C/C++ code

LIBRARY     XXX.DLL

EXPORTS
    ___CPPdebugHook                @2   ; ___CPPdebugHook
    _aFunc                         @1   ; _aFunc


那么删除后就变成了: 
C/C++ code

LIBRARY     XXX.DLL

EXPORTS
    __CPPdebugHook                @2   ; ___CPPdebugHook
    aFunc                         @1   ; _aFunc

4、用VC的LIB工具,根据上面的def文件生成lib文件。如:LIB /DEF:XXX.def。生成lib文件之后,VC便可以使用这个lib文件了。 

说明:

1)lib.exe是VC自带的,在VC安装目录下;

2)将lib.exe拷贝到第2步的那个目录下;

3)再次新建一个bat文件,输入 LIB /DEF:XXX.def,就会在当前目录下生成VC中使用的lib文件.
综上说来,两种工具开发的DLL在相互使用的时候,主要的问题便是lib库的问题,能把这一问题解决好行了。

 

猜你喜欢

转载自blog.csdn.net/huang714/article/details/89672599