_cdecl和_stdcall的区别

_cdecl与_stdcall的主要区别在于参数的传递方式及清理工作:_cdecl由调用者清理栈,而_stdcall由被调用者清理。此外,两者在函数名修饰方式上也有所不同,_stdcall会在函数名前加下划线并附带参数字节数。

 1、_cdecl和_stdcall的区别:

     1) _cdecl调用按照从右往左的顺序将参数入站,由调用者把参数弹出栈

            _stdcall调用按照从右往左的顺序将参数入站 ,由被调用者把参数弹出栈

     2)_stdcall 和_cdecl对函数名最终生成符号的方式不同:_stdcall调用约定在输出函数名前加下划线,后面为“@”和参数的字节数,形如“_funname@number;而_cdecl调用约定在仅输出函数名前加下划线,形如_funname.

注:如果通过VC++编写的DLL欲被其他语言编写的程序调用,应将函数的调用方式声明为__stdcall方式,WINAPI都采用这种方式,而C/C++缺省的调用方式却为__cdecl。若采用C编译方式(在C++中需将函数声明为extern "C")

 

另外可以参考资料:http://www.cnblogs.com/Winston/archive/2008/09/11/1289391.html

http://www.cppblog.com/kenny/archive/2011/04/19/144539.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值