c++builder调用VC的dll以及VC调用c++builder的dll

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

解析__cdecl,__fastcall, __stdcall 的不同:
在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式。
比如说__cdecl,它是标准的c方法的堆栈调用方式,就是在函数调用时的参数压入堆栈是与函数的声明顺序相反的,其它两个可以看MSDN,不过这个对我们编程没有太大的作用
---------------------------------------------------------------
调用约定
调用约定(Calling convention)决定以下内容:函数参数的压栈顺序,由调用者还是被调用者把参数弹出栈,以及产生函数修饰名的方法。MFC支持以下调用约定:
_cdecl
按从右至左的顺序压参数入栈,由调用者把参数弹出栈。对于"C"函数或者变量,修饰名是在函数名前加下划线。对于"C++"函数,有所不同。
如函数void test(void)的修饰名是_test;对于不属于一个类的"C++"全局函数,修饰名是_test@@ZAXXZ(怎么感觉像乱码??)。
这是MFC缺省调用约定。由于是调用者负责把参数弹出栈,所以可以给函数定义个数不定的参数,如printf函数。
_stdcall
按从右至左的顺序压参数入栈,由被调用者把参数弹出栈。对于"C"函数或者变量,修饰名以下划线为前缀,然后是函数名,然后是符号"@"及参数的字节数,如函数int func(int a, double b)的修饰名是_func@12。对于"C++"函数,则有所不同。所有的Win32 API函数都遵循该约定。
_fastcall
头两个DWORD类型或者占更少字节的参数被放入ECX和EDX寄存器,其他剩下的参数按从右到左的顺序压入栈。由被调用者把参数弹出栈,对于"C"函数或者变量,修饰名以"@"为前缀,然后是函数名,接着是符号"@"及参数的字节数,如函数int func(int a, double b)的修饰名是@func@12。对于"C++"函数,有所不同。
未来的编译器可能使用不同的寄存器来存放参数。

Dll中用 __declspec(dllexpo

VC调用 C++Builder制作的DLL C++Builder6.0制作的DLL //VC6.0调用 //C++Builder dll CPP 阅读详情

相关推荐

C++Builder、C#、VC调用 C++Builder制作的DLL

刚才看见一个网友问关于 VC调用 C++Builder制作的DLL的问题半天没有人回复, 我就写了个最简单的例子//C++Builder6.0制作的DLL //VC6.0调用 //C++Builder dll CPP #include #include #pragma hdrstop //--------------------------------------------------------------------------- // Important note about

zhouzhangkui的专栏 4091

c++ builder/BCB如何编写,调用动态链接库DLL

一 编写动态链接库DLL DLL简称动态链接库,是Windows中程序的重要组成部分。想象一下,一个程序需要多人共同完成开发,怎么个共同法?这时我们就要考虑把程序分为好几个模块,团队每一个成员开发一个模块。问题来了:如何将模块组合并成一个完整系统?还有,我们开发的软件需要不断升级,如何升级?难道每次非得把整个工程重新编译一次再发布给用户吗?解决这些问题的科学办法,就是开发动态链接库DLL。 现在以开发myDLL.dll动态链接库为例,讲讲BCB中开发动态链接库的方法。 1、新建立一个工程:File-New

weixin_45682858的博客 1624

C++Builder建立及调用DLL

DLL简称动态链接库,是Windows中程序的重要组成部分。想象一下,一个程序需要多人共同完成开发,怎么个共同法?这时我们就要考虑把程 序分为好几个模块,团队每一个成员开发一个模块。问题来了:如何将模块组合并成一个完整系统?还有,我们开发的软件需要不断升级,如 何升级?

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 工程里使用 Visual C++ DLL——第1部分:C函数

C++Builder 工程里使用 Visual C++ DLL——第1部分:C函数译者序:  第一次读这篇文章是在 2001 年 10 月,帮我解决了一点小问题。本来不好意思翻译,因为英语水平实在太差。最近发现不少网友在问在 C++Builder 的工程里调用 Visual C++ DLL 的问题,也许是用 C++Builder 的人比以前多了吧。于

shadowstar's blog 2963

c++builder delphi 调用dll dll编写

c++builder动态调用dll // 定义 typedef int __stdcall MyFunction (int x, char *str); int rtn = 0; String dllName = "XXXX.dll"; HINSTANCE hInstance = LoadLibrary(dllName.c_str()); MyFunction * pMyFun...

weixin_33862188的博客 412

c++ builder(BCB)中DLL的创建与调用

1、DLL创建 File->New->Other,选择C++ builder->Dynamic Library,选择C++,Visual ComponentLibrary。 2、DLL的代码输写 主头文件,声明和定义导出结构体 主CPP文件,写导出函数定义,导出函数用 extern "C" 声明,加 __declspec(dllexport) 修饰,函数名前加__stdcall修饰表示Windows API默认调用方式。 如下: extern "C"__declspe..

weixin_45682858的博客 2298

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++Builder调用VC生成的DLL方法

C++Builder调用VC生成的DLL方法 新建一个bat文件,写入下面一行。运行即可 implib -a -c XOSQL.lib XOSQL.dll 需要提供VC的动态链接库.dll,运行后生成BCB能用的.lib文件

Coperator 911

C++BuilderVCDLL相互调用示例

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

大道至简,知易行难 4461

VC创建DLLC++BUILDER调用过程

<br /><br /><br /><br />vc创建DLLC++BUILDER调用过程<br />其实,在实际的工作中这个事我做了N遍,可每次用完后忘得一干二净(我这人记性不好),每次想做一个DLL都得重新上网找例子,重新调试,费时费力。这次狠下决心要记下全过程:<br />一、在VC中建立一个DLL工程,名为DLLABC,其他按照默认下一步就OK了。<br /><br /><br />二、在头文件DLLABC.H中添加声明:<br />extern "C"<br />{<br />  int EXP

2149

C++Builder调用VCdll以及VC调用C++Builderdll

解析__cdecl,__fastcall, __stdcall 的不同:在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式。 比如说__cdecl,它是标准的c方法的堆栈调用方式,就是在函数调用时的参数压入堆栈是与函数的声明顺序相反的,其它两个可以看MSDN,不过这个对我们编程没有太大的作用 --------------------------------------------

张彤的专栏 845

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

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

3152

C++BuilderVCDLL相互调用[转自csdn论坛]

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

zhoubl668的专栏:远帆,梦之帆! 1833
上一篇: C++ builder中的线程
下一篇: DLL中调用约定和名称修饰
helenhf
博客等级 码龄22年 42粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值