型別名
作用handle
控制代碼winapi
乙個巨集 替換的是: __stdcall
lpvoid
沒有型別的指標
dword
double word 登錄檔鍵值
wchar_t
寬字元 unicode編碼也是存在這裡面但是不能代表這是unicode的儲存型別 可以使用text() 將char轉為wchar_t
常用vc資料型別。
持續更新
資料型別對比
#define winapi __stdcall#define winapiv __cdecl
#define apientry __stdcall
#define callback __stdcall
#define apiprivate __stdcall
幾個關鍵字的對比
__stdcall、__cdecl和__fastcall是三種函式呼叫協議,函式呼叫協議會影響函式引數的入棧方式、棧內資料的清除方式、編譯器函式名的修飾規則等。
呼叫協議常用場合
__stdcall:windows api預設的函式呼叫協議。
__cdecl:c/c++預設的函式呼叫協議。
__fastcall:適用於對效能要求較高的場合。
函式引數入棧方式
__stdcall:函式引數由右向左入棧。
__cdecl:函式引數由右向左入棧。
__fastcall:從左開始不大於4位元組的引數放入cpu的ecx和edx暫存器,其餘引數從右向左入棧。
問題一:__fastcall在暫存器中放入不大於4位元組的引數,故效能較高,適用於需要高效能的場合。
棧內資料清除方式
__stdcall:函式呼叫結束後由被呼叫函式清除棧內資料。
__cdecl:函式呼叫結束後由函式呼叫者清除棧內資料。
__fastcall:函式呼叫結束後由被呼叫函式清除棧內資料。
問題一:不同編譯器設定的棧結構不盡相同,跨開發平台時由函式呼叫者清除棧內資料不可行。
問題二:某些函式的引數是可變的,如printf函式,這樣的函式只能由函式呼叫者清除棧內資料。
問題三:由呼叫者清除棧內資料時,每次呼叫都包含清除棧內資料的**,故可執行檔案較大。
c語言編譯器函式名稱修飾規則
__stdcall:編譯後,函式名被修飾為「_functionname@number」。
__cdecl:編譯後,函式名被修飾為「_functionname」。
__fastcall:編譯後,函式名給修飾為「@functionname@nmuber」。
注:「functionname」為函式名,「number」為引數位元組數。
注:函式實現和函式定義時如果使用了不同的函式呼叫協議,則無法實現函式呼叫。
c++語言編譯器函式名稱修飾規則
__stdcall:編譯後,函式名被修飾為「?functionname@@yg******@z」。
__cdecl:編譯後,函式名被修飾為「?functionname@@ya******@z」。
__fastcall:編譯後,函式名被修飾為「?functionname@@yi******@z」。
注:「******」為函式返回值型別和引數型別表。
注:函式實現和函式定義時如果使用了不同的函式呼叫協議,則無法實現函式呼叫。
c語言和c++語言間如果不進行特殊處理,也無法實現函式的互相呼叫。
**摘)
VC常用資料型別列表
type default size description基礎 型別全是 小寫說明 這些基礎資料型別對於mfc還是api都是被支援的 boolean unsigned 8 bit 取值true false byte unsigned 8 bit,整數,輸出按字元輸出 char unsigned 8 ...
VC常用資料型別列表
type default size description 基 礎類 型 全 是 小 寫 說明 這些基礎資料型別對於mfc還是api都是被支援的 boolean unsigned 8 bit 取值true false byte unsigned 8 bit,整數,輸出按字元輸出 char unsig...
VC常用的資料型別
資料型別 意義 bool boolean值 true or false bstr 32 bit字元指標 byte 8 bit整數,無正負號 colorref 32 bit數值,代表乙個顏色值 dword 32 bit整數,無正負號 long 32 bit整數,有正負號 lparam 32 bit數值...