vc 中stdcall與cdecl的相關知識

2021-04-30 03:02:46 字數 541 閱讀 5898

_stdcall 和 __cdecl 都屬於呼叫方式

一般我們在宣告函式時都沒有顯示的說明呼叫方式,因為不同語言都有不同的預設呼叫方式

//********能否實現變參**********//

_stdcall

_stdcall是pascal程式的預設呼叫方式,通常用於win32 api中,由主呼叫函式採用從右到左的壓棧方式進行引數壓棧,然後由被呼叫者彈棧(pop),被呼叫者自己在退出時清空堆疊。

_cdecl

c語言呼叫中預設的函式修飾_cdecl,由主呼叫函式進行引數壓棧並且恢復堆疊。實參的壓棧順序是從右到左,最後由主調函式進行堆疊恢復(彈棧)。由於主呼叫函式管理堆疊,所以可以實現變參函式。

_stdcall主調函式壓棧,被調函式彈棧,這樣被調函式只能根據他的參數列進行彈棧,所以沒有辦法實現變參

_cdecl主調函式壓棧,主調函式彈棧,壓棧時已經知道有多個引數,這樣可以實現變參

轉至:http://blog.csdn.net/collective/archive/2009/04/02/4042592.aspx

VC 編寫 stdcall 方式的DLL

vc工具 vs2005 delphi 工具 delphi 7 vs2005 新建dll 新建 專案 儲存時選擇 dll testdll.cpp 定義 dll 應用程式的入口點。include stdafx.h ifdef managed pragma managed push,off endif b...

c c 中 stdcall與dll動態呼叫

1.stdcall在動態dll呼叫中的注意事項 為了用vc寫的dll能被其它語言的寫的程式使用,即實現跨語言。我們在dll的函式呼叫約定中使用 stdcall 但當用getprocaddress呼叫是卻失敗了.用dumpbin工具檢視匯出的函式名可以看到 匯出的函式名確實為 mygetgrad 20...

stdcall 與 cdecl 的區別

stdcall 與 cdecl 的區別 幾乎我們寫的每乙個windows api函式都是 stdcall型別的,首先,需要了解兩者之間的區別 windows的函式呼叫時需要用到棧 stack,一種先入後出的儲存結構 當函式呼叫完成後,棧需要清除,這裡就是問題的關鍵,如何清除?如果我們的函式使用了 c...