解析__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
相关推荐
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
c++ builder/BCB如何编写,调用动态链接库DLL
一 编写动态链接库DLL DLL简称动态链接库,是Windows中程序的重要组成部分。想象一下,一个程序需要多人共同完成开发,怎么个共同法?这时我们就要考虑把程序分为好几个模块,团队每一个成员开发一个模块。问题来了:如何将模块组合并成一个完整系统?还有,我们开发的软件需要不断升级,如何升级?难道每次非得把整个工程重新编译一次再发布给用户吗?解决这些问题的科学办法,就是开发动态链接库DLL。 现在以开发myDLL.dll动态链接库为例,讲讲BCB中开发动态链接库的方法。 1、新建立一个工程:File-New
C++Builder建立及调用DLL
DLL简称动态链接库,是Windows中程序的重要组成部分。想象一下,一个程序需要多人共同完成开发,怎么个共同法?这时我们就要考虑把程 序分为好几个模块,团队每一个成员开发一个模块。问题来了:如何将模块组合并成一个完整系统?还有,我们开发的软件需要不断升级,如 何升级?
C++Builder及VC的库相互调用
coff2omf vc.lib bc.lib implib -f xxx.lib xxx.dlldll文件为VC编译的动态库lib文件为你需要转换的c++ builder 使用的静态库。这也是c++ builder自带的转换工具,控制台里面可输入implib -h查看命令使用帮助。 很遗憾,由于MS和Borland(CodeGear)两家的编辑器实现细节不同,造成了它们生成的DLL不能相互...
在 C++Builder 工程里使用 Visual C++ DLL——第1部分:C函数
在 C++Builder 工程里使用 Visual C++ DLL——第1部分:C函数译者序: 第一次读这篇文章是在 2001 年 10 月,帮我解决了一点小问题。本来不好意思翻译,因为英语水平实在太差。最近发现不少网友在问在 C++Builder 的工程里调用 Visual C++ DLL 的问题,也许是用 C++Builder 的人比以前多了吧。于
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...
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..
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 a...
C++Builder调用VC生成的DLL方法
C++Builder调用VC生成的DLL方法 新建一个bat文件,写入下面一行。运行即可 implib -a -c XOSQL.lib XOSQL.dll 需要提供VC的动态链接库.dll,运行后生成BCB能用的.lib文件
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 aFu
VC创建DLL,C++BUILDER调用过程
<br /><br /><br /><br />vc创建DLL,C++BUILDER调用过程<br />其实,在实际的工作中这个事我做了N遍,可每次用完后忘得一干二净(我这人记性不好),每次想做一个DLL都得重新上网找例子,重新调试,费时费力。这次狠下决心要记下全过程:<br />一、在VC中建立一个DLL工程,名为DLLABC,其他按照默认下一步就OK了。<br /><br /><br />二、在头文件DLLABC.H中添加声明:<br />extern "C"<br />{<br /> int EXP
C++Builder调用VC的dll以及VC调用C++Builder的dll
解析__cdecl,__fastcall, __stdcall 的不同:在函数调用过程中,会使用堆栈,这三个表示不同的堆栈调用方式和释放方式。 比如说__cdecl,它是标准的c方法的堆栈调用方式,就是在函数调用时的参数压入堆栈是与函数的声明顺序相反的,其它两个可以看MSDN,不过这个对我们编程没有太大的作用 --------------------------------------------
C++ builder 调用VC 封装的dll组件
C++builder调用自己写的组件或者VC写的dll,还是很方便的,但是过程中会有很多细节问题, 我很负责人的想骂网上那些不不负责任,写出方法,直接粘贴别人方法的,不整理的,乱讲的,代码都有问题的童鞋们。你们真是作风不严谨,写代码不认真。。 给别人制造难度就是给自己制造难度。。 1.。。C++builder静态调用VC的dll
C++Builder及VC的DLL相互调用[转自csdn论坛]
常在江湖飘,少不了要和DLL打交道。有时我们需要使用C++Builder编写一个DLL,然后拿到VC中用(比如用C++Builder写一个窗体封装到DLL);有时又要拿VC编写的DLL在C++Builder使用(比如拿到一个产品的开发包,这个包是一堆用VC写的DLL)。 很遗憾,由于MS和Borland(CodeGear)两家的编辑器实现细节不同,造成了它们生成的DLL不能相互通用,因此给实
4091




被折叠的 条评论
为什么被折叠?



