C++Builder及VC的DLL相互调用

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

from: http://topic.csdn.net/u/20090302/17/99d1fbc5-4be6-4744-96d9-09b16c0d93c3.html

 

常在江湖飘,少不了要和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库的问题,能把这一问题解决好行了。

C++BuilderVCDLL相互调用[转自csdn论坛]  常在江湖飘,少不了要和DLL打交道。有时我们需要使用C++Builder编写一个DLL,然后拿到VC中用(比如用C++Builder写一个窗体封装到DLL);有时又要拿VC编写的DLLC++Builder使用(比如拿到一个产品的开发包,这个包是一堆用VC写的DLL)。 很遗憾,由于MS和Borland(CodeGear)两家的编辑器实现细节不同,造成了它们生成的DLL不能相互通用,因此给实 阅读详情

相关推荐

国外学习论坛

由于国家防火墙的问题,导致无法访问,也无法直接粘贴到博客中,网址中的“+”用“.”代替就是完整的网址。 1、http://edn.embarcadero+com/article/29122,Delphi和c++builder比较好的学习论坛

lcfeng1982的专栏 1142

C++ builder全系列下载链接

C++Builder 版本下载合集更新至10.4.1 - C++ Builder XE7 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)

shune_yin的博客 3255

C++ builder 调用VC 封装的dll组件

C++builder调用自己写的组件或者VC写的dll,还是很方便的,但是过程中会有很多细节问题,            我很负责人的想骂网上那些不不负责任,写出方法,直接粘贴别人方法的,不整理的,乱讲的,代码都有问题的童鞋们。你们真是作风不严谨,写代码不认真。。          给别人制造难度就是给自己制造难度。。           1.。。C++builder静态调用VCdll

3152

C++BuilderVCDLL相互调用解决方案

C++BuilderVCDLL相互调用解决方案 由于MS和Borland(CodeGear)两家的编辑器实现细节不同,造成了它们生成的DLL不能相互通用,因此给实际带来了很多的麻烦。下面来说一说如何解决这个问题。 VC生成DLLC++Builder调用 1、用extern "C"修饰VC导出的DLL函数。如:extern "C" __declspec(dllexport) int a...

huang714的专栏 949

C++BuilderVCDLL相互调用示例

C++BuilderVCDLL相互调用示例 由于MS和Borland(CodeGear)两家的编辑器实现细节不同,造成了它们生成的DLL不能相互通用,因此给实际带来了很多的麻烦。下面来说一说如何解决这个问题。  VC生成DLLC++Builder调用 1、用extern "C"修饰VC导出的DLL函数。如:extern "C" __declspec(dllexport) int aFu

大道至简,知易行难 4461

C++BuilderVCDLL相互调用[转]

原文地址:[url]http://topic.csdn.net/u/20090302/17/99d1fbc5-4be6-4744-96d9-09b16c0d93c3.html[/url] 原创帖,引用的朋友请标明出处。 常在江湖飘,少不了要和DLL打交道。有时我们需要使用C++Builder编写一个DLL,然后拿到VC中用(比如用C++Builder写一个窗体封装到DLL);有时又要拿VC编写...

dazhilao 323

C++BuilderVC的库相互调用

coff2omf  vc.lib  bc.lib implib -f xxx.lib xxx.dlldll文件为VC编译的动态库lib文件为你需要转换的c++ builder 使用的静态库。这也是c++ builder自带的转换工具,控制台里面可输入implib -h查看命令使用帮助。 很遗憾,由于MS和Borland(CodeGear)两家的编辑器实现细节不同,造成了它们生成的DLL不能相互...

weixin_34319640的博客 1069

c++ builder 与 vs 互调用 dll

原创帖,引用的朋友请标明出处。 常在江湖飘,少不了要和DLL打交道。有时我们需要使用C++Builder编写一个DLL,然后拿到VC中用(比如用C++Builder写一个窗体封装到DLL);有时又要拿VC编写的DLLC++Builder使用(比如拿到一个产品的开发包,这个包是一堆用VC写的DLL)。 很遗憾,由于MS和Borland(CodeGear)两家的编辑器实现细节不同,造成了它们生成的DLL不能相互通用,因此给实际带来了很多的麻烦。下面来说一说如何解决这个问题。 一、VC生成DLLC++Buil

全粘工程师 1365

vc++调用bcb的dll(一)

bcb6中: extern "C" __declspec(dllexport) void __stdcall ShowF(void); void _export _stdcall ShowF(void) {     ShowMessage("kkkkkkkkkkkkk"); } //////////////////////////////////////////////////////

kyfvc的专栏 2744

关于软件模块化

<br />关于软件模块化<br />对于大型软件应该将软件细分为各种小的模块,在这里列出一些方法。<br />(1)DLL<br />(2)COM<br />(3)EXE分离<br />在应用程序开发方面推荐的方式是使用 C++ Builder 编写界面,VC 编写功能模块,通过DLL或者COM方式来进行整合。<br />DLL优点:<br />(1)可以使用不同语言编写,同样也可以被不同的语言所调用,例如C++ Builder调用VC编写的DLL。在DLL中可以加入丰富的额外功能,例如对话框等。编写DL

weibojishu1984的专栏 699

DLL学习

DLL的优点 简单的说,dll有以下几个优点: 1) 节省内存。同一个软件模块,若是以源代码的形式重用,则会被编译到不同的可执行程序中,同时运行这些exe时这些模块的二进制码会被重复加载到内存中。如果使用dll,则只在内存中加载一次,所有使用该dll的进程会共享此块内存(当然,像dll中的全局变量这种东西是会被每个进程复制一份的)。 2) 不需编译的软件系统升级,若一个软件

yangshuangtao的专栏 854
上一篇: unsigned char * and AnsiString convert
下一篇: 进程间通信的方法
YuwenTims
博客等级 码龄18年 2粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值