複製鏈接
請複製以下鏈接發送給好友

WINAPI

鎖定
視窗操作系統應用程序接口Windows API),有非正式的簡稱法為WinAPI,是微軟對於Windows操作系統中可用的內核應用程序編程接口的稱法。它設計為由C/C++程序調用,而且它也是應用軟件與Windows系統最直接的交互方式。
外文名
WINAPI
性    質
科學
類    別
計算機

WINAPI含義

WINAPI見windef.h這個頭文件
#define WINAPI__stdcall
默認情況下,我們的函數調用都是遵循__stdcall這個規則的。當然,也有諸如__cdecl、__pascal等規則。
使用__stdcall還是__cdecl或__pascal,在純Windows編程下並非特別需要。
__stdcall:
1、進行函數調用,函數參數的入棧方式是最右邊先入棧。
2、同時__stdcall規定,被調函數負責棧的回收(調用者只負責壓棧). 題外話:__pascal的調用規則是從左到右,正好與__stdcall相反。
3、C調用約定(即用__cdecl關鍵字説明)(The C default calling convention)按從右至左的順序壓參數入棧,由調用者把參數彈出棧。對於傳送參數的內存棧是由調用者來維護的(正因為如此,實現可變參數vararg的函數(如printf)只能使用該調用約定)當然,這些工作是應用程序自己完成的,不需要編寫者動手。彙編語言另當別論(POP SP POP BP等) 。另外,在函數名修飾約定方面也有所不同。 _cdecl是C和C++程序的缺省調用方式。每一個調用它的函數都包含清空堆棧的代碼,所以產生的可執行文件大小會比調用_stdcall函數的大。函數採用從右到左的壓棧方式。VC將函數編譯後會在函數名前面加上下劃線前綴。

WINAPIMFC缺省調用約定

函數調用過程中,會使用棧。__stdcall與__cdecl是兩種不同的函數調用約定,定義了函數參數入棧的順序,由調用函數還是被調用函數將參數彈出棧,以及產生函數修飾名的方法。關於這兩個調用約定的詳細信息,讀者可參看MSDN。對於參數個數可變的函數,例如printf,使用的是__cdecl調用約定,Win32的API函數都遵循__stdcall調用約定。在VC++開發環境中,默認的編譯選項是__cdecl,對於那些需要__stdcall調用約定的函數,在聲明時必須顯式地加上__stdcall。在Windows程序中,回調函數必須遵循__stdcall調用約定,所以我們在聲明回調函數時要使用CALLBACK。使用CALLBACK而不是__stdcall的原因是為了告訴我們這是一個回調函數。注意,在Windows 98和Windows 2000下,聲明窗口過程函數時,即使不使用CALLBACK也不會出錯,但在Windows NT4.0下,則會出錯。