我想知道为什么这么多 Win API 函数只定义为它们在 MinGW 中的实际实现。
例子:
MessageBox()
MSDN文档中描述的功能:
int WINAPI MessageBox(
_In_opt_ HWND hWnd,
_In_opt_ LPCTSTR lpText,
_In_opt_ LPCTSTR lpCaption,
_In_ UINT uType
);
下面是 MinGW ( winuser.h
) 的实现:
#define MessageBox MessageBoxA
/* ... */
WINUSERAPI int WINAPI MessageBoxA(HWND,LPCSTR,LPCSTR,UINT);
所以MessageBox
不是函数,它只是对真实函数的定义。
另一个(取自winbase.h
:
#define GetVersionEx GetVersionExA
/* ... */
WINBASEAPI BOOL WINAPI GetVersionExA(LPOSVERSIONINFOA);
正如您所看到的,在大多数情况下,函数是作为宏来实现的。
这样做有什么理由吗?为什么它们没有被实现为“真实”功能(使用它们的真实姓名)?