我已经开始在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应用程序编程接口