WINAPI代表什么?

我已经开始在C中学习Win32 API了。我看到主函数是类似的

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { .. } 

但是我知道C中的一个函数是类似的

 [ReturnType] [FunctionName] (Args) { .. } 

在这种情况下,返回types是int,函数名称是WinMain。 那么WINAPI代表什么,是否有必要?

谢谢 。 🙂

它指定调用约定 ,这是函数的参数如何在堆栈上放置和管理。

如果你打电话给一些外部代码,比如windows API,你可以混合调用约定,只要每个人都与他们的期望在同一个“页面”上。

典型的C调用使用所谓的cdecl进行编译。 在cdecl中,调用者清理栈中推送的参数。

WINAPI,也称为“标准调用”,意味着被调用的函数负责清理其参数堆栈。

MS编译器将用_前缀一个cdecl调用,而一个WINAPI得到一个前导_,并在函数名称被压缩时获得一个作为前缀的@ {BYTES-NEEDED}。 从上面的链接:

 call _sumExample@8 ;WINAPI call _someExample ;cdecl 

它是“调用约定”,用#define定义为宏,并解析为__stdcall

阅读更多关于MSDN :

名称装饰的方式取决于语言以及如何指示编译器使该函数可用,即调用约定。 Windows使用的标准进程间调用约定称为WinAPI约定。 它在Windows头文件中被定义为WINAPI,而WINAPI又被定义为使用Win32声明符__stdcall。

Win – Windows

API – 应用程序编程接口

Windows应用程序编程接口