VC 常用資料型別

2021-09-28 17:09:54 字數 1747 閱讀 8709

型別名

作用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數值...