_cdecl C调用规则:
1.在后面的参数先进入堆栈;
2.在函数返回后,调用者要负责清除堆栈.所以这种调用常会生成较大的可执行程序.
3. C/C++的缺省调用协定,由调用者清理堆栈,这就是C/C++中可以使
用可变参数的函数的原因,所有参数自右至左入栈,生成的代码中
函数名有一个_(下划线)作前缀。
__stdcall 又称为WINAPI, 其调用规则:
1.在后面的参数先进入堆栈;
2.被调用的函数在返回前自行清理堆栈,所以生成的代码比cdecl小.
3. Win32 API的调用协定,由被调用的函数清理堆栈,所有参数自右至
左入栈,生成的代码中函数名有一个_(下划线)作前缀一个@和参数总
字节数(十进制)作後缀。它不支持可变参数,但它产生的代码比
_cdecl的短,因为没有每次调用後的清理堆栈的代码。
Pascal 调用规则:
Pascal调用规则主要用在案WIN16函数库中,现在基本不用.
1.参数在前的先进入堆栈;
2.不支持可变参数的函数调用.
fastcall
fastcall 是把函数参数列表的前三个参数放入寄存器eax,edx,ecx,其他参数压栈。
fastcall是BCB为了更好的兼容Delphi写的VCL而用的,delphi中的默认call是fastcall,是把函数参数列表的前三个参数放入寄存器,我估计你记错了,要么你再看看Help
下面的连接对各中调用规则进行了讨论:
http://msdn2.microsoft.com/en-us/library/k2b2ssfy.aspx