这三个参数都是告诉编译器参数的传递约定,参数的传递约定是指参数的传递顺序(从左到右还是从右到左)和由谁来恢复堆栈指针(调用者或者是被调用者),在 win16下有两种约定: c 和 pascal。
c约定规定参数传递顺序是从右到左,即最右边的参数最先压栈,由调用者恢复堆栈指针。
pascal约定和c约定正好相反,它规定参数是从左向右传递,由被调用者恢复堆栈。
stdcall是c约定和pascal约定的混合体,它规定参数的传递是从右到左, 恢复堆栈的工作交由被调用者。win32只用stdcall约定, 但除了一个特例, 即: wsprintf。
win16采用了pascal约定, 因为pascal约定产生的代码量要小。当不知道参数的个数时,c约定特别有用。
调用约定 压参数入栈顺序 把参数弹出栈者 函数修饰名(calling convention)
-------------------------------------------------------------------------
__cdecl 右->左 调用者 _function
__fastcall 右->左 被调用者 @function@nnn
__stdcall 右->左 被调用者 _function@nnn
__pascal 左->右 被调用者 _function@nnn
-------------------------------------------------------------------------
部分来源:
阅读(2165) | 评论(0) | 转发(0) |