_stdcall 与 _cdecl 的区别(转载)
来源:互联网 发布:中国网络电视台手机版 编辑:程序博客网 时间:2024/05/01 00:39
(1) _stdcall调用
_stdcall是Pascal程序的缺省调用方式,参数采用从右到左的压栈方式,被调函数自身在返回前清空堆栈。
WIN32 Api都采用_stdcall调用方式,这样的宏定义说明了问题:
#define WINAPI _stdcall
按C编译方式,_stdcall调用约定在输出函数名前面加下划线,后面加“@”符号和参数的字节数,形如_functionname@number。
对于“C”函数或者变量,修饰名以下划线为前缀,然后是函数名,然后是符号“@”及参数的字节数,如函数int func(int a, double b)的修饰名是_func@12。对于“C++”函数,则有所不同。
(2) _cdecl调用
_cdecl是C/C++的缺省调用方式,参数采用从右到左的压栈方式,传送参数的内存栈由调用者维护。_cedcl约定的函数只能被C/C++调用,每一个调用它的函数都包含清空堆栈的代码,所以产生的可执行文件大小会比调用_stdcall函数的大。
由于_cdecl调用方式的参数内存栈由调用者维护,所以变长参数的函数能(也只能)使用这种调用约定。
由于Visual C++默认采用_cdecl 调用方式,所以VC中中调用DLL时,用户应使用_stdcall调用约定。
按C编译方式,_cdecl调用约定仅在输出函数名前面加下划线,形如_functionname。对于“C++”函数,有所不同。如函数void test(void)的修饰名是_test;对于不属于一个类的“C++”全局函数,修饰名是?test@@ZAXXZ。这是MFC缺省调用约定。由于是调用者负责把参数弹出栈,所以可以给函数定义个数不定的参数,如printf函数。
(3) _fastcall调用
_fastcall调用较快,它通过CPU内部寄存器传递参数。
按C编译方式,_fastcall调用约定在输出函数名前面加“@”符号,后面加“@”符号和参数的字节数,形如@functionname@number。
**************************************************************************************
相关:
#define CALLBACK __stdcall
#define WINAPI __stdcall
#define WINAPIV __cdecl
#define APIENTRY WINAPI
#define APIPRIVATE __stdcall
#define PASCAL __stdcall
#define cdecl _cdecl
#ifndef CDECL
#define CDECL _cdecl
#endif
参考:
http://hi.baidu.com/lieyu063/blog/item/aa55fb1bfbaa0dfbae51331c.html
http://blog.sina.com.cn/s/blog_4b6d137b01000bn2.html
- _stdcall 与 _cdecl 的区别(转载)
- 转载 _stdcall,_cdecl 的区别
- _stdcall与_cdecl的区别
- _stdcall 与 _cdecl 的区别
- _stdcall 与 _cdecl 的区别
- _stdcall 与 _cdecl 的区别
- _stdcall 与 _cdecl 的区别
- _stdcall 与 _cdecl 的区别
- _stdcall 与 _cdecl 的区别
- _stdcall 与 _cdecl 的区别
- _stdcall 与 _cdecl 的区别
- _stdcall 与_cdecl 的区别
- _stdcall 与 _cdecl 的区别
- _stdcall 与 _cdecl 的区别
- _stdcall与_cdecl的区别
- _stdcall与_cdecl的区别
- _stdcall与_cdecl的区别
- _stdcall与_cdecl的区别
- 动态委托及其应用
- MSDN的.net学习资料库
- 总结一下维护了一年的一个软件系统的软件体系(四)
- IEEE制定的浮点数格式
- 关于内存映射文件技术处理大文件的读写
- _stdcall 与 _cdecl 的区别(转载)
- VS2005无法启动调试问题
- hsqldb.jar快速使用
- OpenGL基础图形编程 - OpenGL与3D图形世界
- JavaScript关键字和保留字
- 静态页面中使用的一些动态
- OpenGL基础图形编程 - OpenGL概念建立
- OpenGL基础图形编程 - Windows NT环境下的OpenGL
- 终于在CSDN上开通自己的blog了,庆祝一下