我正在学习Win32编程,以及WinMain原型如下:

int WINAPI WinMain ( HINSTANCE instance, HINSTANCE prev_instance, PSTR cmd_line, int cmd_show )

我对此感到困惑WINAPI标识符是和发现的:

#define WINAPI      __stdcall

这做什么?我对返回类型后完全有一些东西感到困惑。什么是__stdcall为了?当返回类型和函数名称之间存在某些内容时,这是什么意思?

答案

__stdcall是用于该功能的呼叫约定。这告诉编译器,适用于设置堆栈,推动参数并获得返回值的规则。

还有许多其他调用约定,__cdecl,,,,__thiscall,,,,__fastcall和奇妙的名字__declspec(naked)__stdcall是 Win32 系统调用的标准调用约定。

维基百科涵盖了细节

当您调用代码之外的函数(例如OS API)或OS正在调用您时,这主要重要(就像Winmain一样)。如果编译器不知道正确的呼叫约定,那么您可能会遇到非常奇怪的崩溃,因为堆栈将无法正确管理。

来自: stackoverflow.com