Chinaunix首页 | 论坛 | 博客
  • 博客访问: 522192
  • 博文数量: 252
  • 博客积分: 6057
  • 博客等级: 准将
  • 技术积分: 1635
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-21 10:17
文章分类

全部博文(252)

文章存档

2013年(1)

2012年(1)

2011年(32)

2010年(212)

2009年(6)

分类:

2010-07-16 10:08:14


发表于:2009-03-02 17:21:55
原创帖,引用的朋友请标明出处。
常在江湖飘,少不了要和DLL打交道。有时我们需要使用C++Builder 编写一个DLL,然后拿到VC中用(比如用C++Builder写一个窗体封装到DLL);有时又要拿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。
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文件了。

综上说来,两种工具开发的DLL在相互使用的时候,主 要的问题便是lib库的问题,能把这一问题解决好行了。



阅读(380) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~