2010-02-27 51 views
38

能否請您解釋WINAPIWinMain()的功能?主要功能中的「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++特性呢?

回答

43

WINAPI是一個宏,它的計算結果爲__stdcall,這是一個Microsoft專用關鍵字,用於指定被調用者清除堆棧的調用約定。函數的調用者和被調用者需要同意調用約定來避免損壞堆棧。

+2

爲什麼它在這個特定的地方?難道他們不能讓宏觀上面的一行? – Pyjong 2010-02-27 18:31:08

+3

調用約定關鍵字在返回類型和函數名稱之間傳遞,因爲多年前C++編譯器上的某個人就是這麼定義的。我不知道語法背後的原因,甚至不知道哪個編譯器是第一個支持指定調用約定(cdecl,pascal,fortran等)的編譯器。微軟? Borland公司?格子?還有別的嗎? – bk1e 2010-02-28 03:45:18

5

這是用來表示在Windows調用約定宏定義。從MSDN

名稱裝飾方式對語言取決於 和編譯器 指示如何使功能 可用,也就是調用 約定。 DLL使用的Windows標準進程間調用約定稱爲WinAPI 約定。它在Windows 中定義爲WINAPI頭文件,這是在 中定義的使用Win32 定義的__stdcall聲明。

2

它是Windows特有的。它指定了調用約定。 WinMain被Windows調用,這確保了調用者和被調用者對調用約定達成一致。