_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...