C++Builder及VC的DLL相互调用(刚刚测试通过,高兴&&散分)

BORLANDSUN 2009-03-02 05: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文件为:

LIBRARY XXX.DLL

EXPORTS
___CPPdebugHook @2 ; ___CPPdebugHook
_aFunc @1 ; _aFunc

那么删除后就变成了:

LIBRARY XXX.DLL

EXPORTS
__CPPdebugHook @2 ; ___CPPdebugHook
aFunc @1 ; _aFunc

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

综上说来,两种工具开发的DLL在相互使用的时候,主要的问题便是lib库的问题,能把这一问题解决好行了。
...全文
12113 155 打赏 收藏 转发到动态 举报
写回复
用AI写文章
155 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjqabc1109 2012-06-16
  • 打赏
  • 举报
回复
请教:
StrToInt函数只能是对常数字符串变换,对字符串变量不行,有什么办法吗?
ltioaf001 2012-06-10
  • 打赏
  • 举报
回复
我也实现了啊,支持一下
bianchenghaonan 2012-05-16
  • 打赏
  • 举报
回复
很好,我也做个记号,留着以后学习。哈哈哈
BORLANDSUN 2012-04-25
  • 打赏
  • 举报
回复
[Quote=引用 107 楼 的回复:]

[/Quote]
分号后面是注释 ·_·
xuwen4199 2011-09-26
  • 打赏
  • 举报
回复
很有用
melos 2011-08-15
  • 打赏
  • 举报
回复
看看我做过记号没
xjq2003 2011-08-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 borlandsun 的回复:]
原创帖,引用的朋友请标明出处。
常在江湖飘,少不了要和DLL打交道。有时我们需要使用C++Builder编写一个DLL,然后拿到VC中用(比如用C++Builder写一个窗体封装到DLL);有时又要拿VC编写的DLL在C++Builder使用(比如拿到一个产品的开发包,这个包是一堆用VC写的DLL)。
很遗憾,由于MS和Borland(CodeGear)两家的编辑器实现细节不同,造成了它们生成……
[/Quote]简单易行,方便实用
tony2278 2011-07-04
  • 打赏
  • 举报
回复
mark~
jues 2011-06-22
  • 打赏
  • 举报
回复
二、C++Builder生成DLL,VC调用。

如果 是第三方库,没有提供.def文件,那怎么办?

只提供了 .dll;.lib;.h

难道只有宏定义
melos 2011-06-15
  • 打赏
  • 举报
回复
显式连接呢?好像只要前面加_就可以了吧
guoln1010 2011-05-26
  • 打赏
  • 举报
回复
受益匪浅啊
sj890127 2011-05-17
  • 打赏
  • 举报
回复
我想问个问题 千万不要拍我啊。。。。。。。。呜呜求好心人帮忙

我已用C++builder对拍摄下的图像(是一个杯子里面盛半杯土)进行了灰度处理和边缘增强后,已显示了杯子内土的上表面的轮廓,下一步我想知道土上表面的直径。

我现在的想法是 先识别此轮廓线 再从此轮廓线上 找出X坐标最小点和X坐标最大点 便可得知这个圆的直径,现在求好心人指教一二,具体该如何实现呢
rickys2080 2011-05-12
  • 打赏
  • 举报
回复
有时候lib生成了也不行;这时可以显示调用。
wu_jiajia 2011-05-11
  • 打赏
  • 举报
回复
mark
  • 打赏
  • 举报
回复
好淫,赞一个~
zou1881 2010-12-14
  • 打赏
  • 举报
回复
做个记号,方便查阅
cloud_xu 2010-11-24
  • 打赏
  • 举报
回复
看好贴,顶好贴
宝马良驹 2010-10-05
  • 打赏
  • 举报
回复
非常感谢, 试一试再说
benbenxiaoluchi 2010-10-03
  • 打赏
  • 举报
回复
打个记号,以后有用。
we5960 2010-09-16
  • 打赏
  • 举报
回复
学习中,收藏
加载更多回复(122)

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧