轉自:點我
1,_MSC_VER >= 800
Defines the compiler version. Defined as 1200 for Microsoft Visual C++ 6.0. Always defined
定義編譯器的版本,VC++6.0就是1200
if _MSC_VER > 1000的意思就是如果編譯器版本高於1000(VC++5.0)
2,
一個簡單的dll函數,不帶__stdcall的demo
帶__stdcall的demo
dumpbin /exports一下dll
帶__stdcall
不帶_stdcall c++默認調用,MFC缺省調用
PS:
__stdcall是Pascal程序的缺省調用方式,通常用於Win32 Api中,函數採用從右到左的壓棧方式,自己在退出時清空堆棧。VC將函數編譯後會在函數名前面加上下劃線前綴,在函數名後加上 “@ “和參數的字節數。
__cdecl
C調用約定(即用__cdecl關鍵字說明)按從右至左的順序壓參數入棧,由調用者把參數彈出棧。對於傳送參數的內存棧是由調用者來維護的(正因爲如此,實現可變參數的函數只能使用該調用約定)。另外,在函數名修飾約定方面也有所不同。
__cdecl是C和C++程序的缺省調用方式。每一個調用它的函數都包含清空堆棧的代碼,所以產生的可執行文件大小會比調用_stdcall函數的大。函數採用從右到左的壓棧方式。VC將函數編譯後會在函數名前面加上下劃線前綴。是MFC缺省調用約定。