1、_cdecl和_stdcall的區別:
1) _cdecl呼叫按照從右往左的順序將引數入站,由呼叫者把引數彈出棧
_stdcall呼叫按照從右往左的順序將引數入站 ,由被呼叫者把引數彈出棧
2)_stdcall 和_cdecl對函式名最終生成符號的方式不同:_stdcall呼叫約定在輸出函式名前加下劃線,後面為「@」和引數的位元組數,形如「_funname@number;而_cdecl呼叫約定在僅輸出函式名前加下劃線,形如_funname.
注:如果通過vc++編寫的dll欲被其他語言編寫的程式呼叫,應將函式的呼叫方式宣告為__stdcall方式,winapi都採用這種方式,而c/c++預設的呼叫方式卻為__cdecl。若採用c編譯方式(在c++中需將函式宣告為extern "c")
另外可以參考資料:
stdcall 與 cdecl 的區別
stdcall 與 cdecl 的區別 幾乎我們寫的每乙個windows api函式都是 stdcall型別的,首先,需要了解兩者之間的區別 windows的函式呼叫時需要用到棧 stack,一種先入後出的儲存結構 當函式呼叫完成後,棧需要清除,這裡就是問題的關鍵,如何清除?如果我們的函式使用了 c...
stdcall 與 cdecl 的區別
幾乎我們寫的每乙個windows api函式都是 stdcall型別的,首先,需要了解兩者之間的區別 windows的函式呼叫時需要用到棧 stack,一種先入後出的儲存結構 當函式呼叫完成後,棧需要清除,這裡就是問題的關鍵,如何清除?如果我們的函式使用了 cdecl,那麼棧的清除工作是由呼叫者,用...
stdcall與cdecl的區別
1 區別vc 的c c 函式有兩種基本的呼叫約定 stdcall cdecl stdcall cdecl 函式 cint stdcalladds int a,int b int cdecladdc int a,int b asm32 push ebp mov ebp,esp sub esp,40h ...