2019独角兽企业重金招聘Python工程师标准>>>
int WINAPI WinMain(
HINSTANCE hInstance,//当前实例句柄
HINSTANCE hPrevInstance,//先前实例句柄
LPSTR lpCmdLine,//命令行参数
int nCmdShow //显示状态(最大化、最小化、隐藏)
);
WINAPI为调用约定,#define WINAPI __stdcall
具体的调用约定:
1、__cdecl
压栈顺序:从右至左
清栈:函数调用者负责清空,称为caller cleanup
名字修饰(name decoration):在函数名前加上下划线做前缀
注:c/C++函数的缺省调用约定
2、__stdcall
压栈顺序:从右至左
清栈:被调用函数负责清空,称为callee cleanup
名字修饰:在函数名前加上下划线做前缀,名字后用@加上函数参数大小做后缀
注:WINAPI就是__stdcall的#define
3、__fastcall
压栈顺序:第一个参数放在ecx,第二个参数放在edx,其余从右至左
清栈:callee cleanup
名字修饰:在函数名前加上@做前缀,名字后用@加上函数参数大小做后缀,如@foo@8
注:名字叫fast实际就不一定了……
4、thiscall
压栈顺序:this指针(cpp非静态成员函数特有)放在ecx,其余从右至左
清栈:callee cleanup
注:cpp非静态成员函数默认的调用约定
5、naked
压栈顺序:从右至左
清栈:caller cleanup
注:VxDs用的调用约定,将__declspec(naked)写在函数定义处(注意,不是声明)