主函数中的"WINAPI"是什么意思?

65

请问在WinMain()函数中,WINAPI这个词是什么意思?

简单来说..

#include <windows.h>

int -->WINAPI<-- WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow)
{
    MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK);
    return 0;
}

这是 Windows 的一种奇特模式吗?

它有什么作用?或者说,这是我尚未遇到的 C++ 特性是什么?

4个回答

72

WINAPI 是一个宏,它会被转换为 __stdcall。这是微软特有的一个关键字,它指定了一种调用规范,在该规范下被调用者负责清除堆栈。函数的调用方和被调用方需要遵守相同的调用规范来避免破坏堆栈。


5
为什么它会放在这个特定的位置?他们不能把宏定义放在上一行吗? - Pyjong
11
调用约定关键字放在返回类型和函数名之间,因为很多年前从事C编译器工作的人员就是这样定义的。我不知道这种语法背后的原因,也不知道哪个编译器最早支持指定调用约定(cdecl、pascal、fortran等)。微软?Borland?Lattice?还是其他什么? - bk1e

10

WINAPI 是一个宏,它会扩展为__stdcall,这意味着被调用者会清理栈。


10
这是一个宏定义,旨在表示Windows调用约定。根据MSDN所述:名称的修饰方式取决于语言以及编译器如何指示函数可用性,即调用约定。用于DLL的Windows标准进程间调用约定称为WinAPI约定。它在Windows头文件中定义为WINAPI,并使用Win32声明符__stdcall进行定义。

2

这是与Windows相关的。它指定了调用约定。WinMain由Windows调用,这确保了调用者和被调用者在调用约定上达成一致。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接