_cdecl _stdcall

__cdecl程序的壓棧方式爲C風格
__stdcall爲PASCAL風格 
舉個例子:
(1)   C函數  Fun1(a,b,c)
   函數調用時,參數壓棧順序爲 c , b , a
(2)   PASCAL函數 Fun(a,b,c)
  函數調用時,參數壓棧順序爲 a, b , c

==========================
         STDCALL 告訴編譯器參數的傳遞約定。參數的傳遞約定是指參數傳達時的順序(從左到右或從右到左)和由誰恢復堆棧指針(調用者或被調用者)。在Win16下有兩種約定:C 和 PASCAL。C 約定規定參數傳遞順序是從右到左,即最右邊的參數最早壓棧,由調用者恢復堆棧指針。PASCAL約定和C約定正好相反,它規定參數是從左向右傳遞,由被調用者恢復堆棧。Win16採用了PASCAL約定, 由於PASCAL約定產生的代碼量要小。當不知道參數的個數時,C約定特別有用。如在函數wsprintf () 中, wsprintf預先並不知道要傳遞幾個參數,因此它不知道如何恢復堆棧。STDCALL是C約定和PASCAL約定的混合體,它規定參數的傳遞是從右到左,恢復堆棧的工做交由被調用者。Win32只用STDCALL約定,但除了一個特例,即:wsprintf。
本站公眾號
   歡迎關注本站公眾號,獲取更多信息