Windows
數(shù)據(jù)類型(一)
?
由微軟
Windows
操作系統(tǒng)所支持的各種數(shù)據(jù)類型是用來定義函數(shù)的返回值、函數(shù)和消息的參數(shù)以及結(jié)構(gòu)體成員(因為
Win32
程序是用
C
語言來編寫,所以沒有“類”這個概念)的。這些數(shù)據(jù)類型定義了上述元素的尺碼(在內(nèi)存中的,也就是占用內(nèi)存的字節(jié)數(shù))和含義。筆者以前一直不太注意這些東西,結(jié)果在程序設(shè)計時可謂步履維艱。不同類型的常
/
變量,在程序用扮演的角色相去甚遠(yuǎn),了解這些類型,對剖析程序的工作原理是非常有用的。今天又是周末,我把這些類型列出來,然后把它們的“原形”也找出來——是不是很像“照妖鏡”呀。
??????
下面這張表里包括這些類型:字符類型(
character
),整數(shù)類型(
integer
),邏輯值類型(布爾型,海峽那邊的兄弟們喜歡叫“布林型”,
Boolean
),指針類型(
pointer
),句柄型(
handle
)。其中,字符類型、整數(shù)類型和邏輯值(布爾)類型是
C
語言編譯器通用的,也就是與標(biāo)準(zhǔn)
C
語言一樣。大多數(shù)指針類型都是以
P
(
Pointer
)或者
LP
(
Long Pointer
)前綴開頭。“句柄”是指被裝載進(jìn)內(nèi)存的一個資源(本質(zhì)而言就是指一定范圍內(nèi)的唯一編號)。
下面這張表是我結(jié)合MSDN里的資料制作的,因為自己也是初學(xué),做的還比較粗糙,請大家多多指正:)
Windows數(shù)據(jù)類型
|
本質(zhì)類型
|
字節(jié)數(shù)
|
定義過程(來歷)
|
含義
|
ATOM
|
unsigned short
|
2
|
unsigned short→WORD→ATOM
|
在Atom表中,一鍵(16位整數(shù))一值(一個String)為一個Atom。
|
BOOL
|
int
|
*
|
int→BOOL
|
邏輯變量,布爾值 (取值為 TRUE 或 FALSE)
|
BOOLEAN
|
unsigned char
|
1
|
unsigned char→BYTE→BOOLEAN
|
邏輯變量,布爾值 (取值為 TRUE 或 FALSE)
|
BYTE
|
unsigned char
|
1
|
unsigned char→BYTE
|
字節(jié)型,8位。
|
CALLBACK
|
__stdcall
|
調(diào)用
|
__stdcall→CALLBACK
|
回調(diào)函數(shù)的調(diào)用約定
|
CHAR
|
char
|
1
|
char→CHAR
|
8位Windows字符(ANSI)
|
COLORREF
|
unsigned long
|
4
|
unsigned long→DWORD→COLORREF
|
紅,綠,藍(lán)(RGB)值
|
CONST
|
const
|
關(guān)鍵字
|
const→CONST
|
常量
|
CRITICAL_SECTION
|
RTL_CRITICAL_SECTION結(jié)構(gòu)體
|
?
|
RTL_CRITICAL_SECTION(結(jié)構(gòu))→CRITICAL_SECTION
|
Critical-section對象
|
DWORD
|
unsigned long
|
4
|
unsigned long→DWORD
|
32位無符號整數(shù)
|
DWORD_PTR
|
unsigned long
|
4
|
unsigned long→ULONG_PTR→DWORD_PTR(另有其它路徑)
|
略……(用處挺大,不過太長了)
|
DWORD32
|
unsigned int
|
*
|
unsigned int→DWORD32
|
32位無符號整數(shù)
|
DWORD64
|
unsigned __int64
|
8
|
unsigned __int64→DWORD64
|
64位無符號整數(shù)
|
FLOAT
|
float
|
4
|
float→FLOAT
|
浮點數(shù)變量
|
HACCEL
|
HACCEL__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義的指向HACCEL__結(jié)構(gòu)體的指針
|
快捷鍵列表的句柄
|
HANDLE
|
void *(一個地址)
|
|
void *→HANDLE
|
對象的句柄
|
HBITMAP
|
HBITMAP__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義的指向HBITMAP__結(jié)構(gòu)體的指針
|
位圖的句柄
|
HBRUSH
|
HBRUSH__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
畫刷的句柄
|
HCONV
|
HCONV__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
動態(tài)數(shù)據(jù)交換(DDE)會話的句柄
|
HCONVLIST
|
HCONVLIST__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
動態(tài)數(shù)據(jù)交換(DDE)會話列表的句柄
|
HCURSOR
|
HICON__結(jié)構(gòu)體指針
|
|
HICON__ *→HICON→HCURSOR
|
光標(biāo)的句柄
|
HDC
|
HDC__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
設(shè)備上下文(DC)的句柄
|
HDDEDATA
|
HDDEDATA__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
動態(tài)數(shù)據(jù)交換數(shù)據(jù)的句柄
|
HDESK
|
HDESK__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
桌面(Desktop)的句柄
|
HDROP
|
HDROP__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
Handle to an internal drop structure.
|
HDWP
|
void *(一個地址)
|
|
void *→HANDLE→HDWP
|
Handle to a deferred window position structure.
|
HENHMETAFILE
|
HENHMETAFILE__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
增強圖元文件的句柄
|
HFILE
|
int
|
*
|
int→HFILE
|
由OpenFile(而不是CreateFile)打開的文件的句柄.
|
HFONT
|
HFONT__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
字體的句柄
|
HGDIOBJ
|
void near *
|
|
void NEAR *→HGDIOBJ
|
GDI對象的句柄
|
HGLOBAL
|
void *(一個地址)
|
|
void *→HANDLE→HGLOBAL
|
全局內(nèi)存塊的句柄
|
HHOOK
|
HHOOK__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
句子(hook)的句柄
|
HICON
|
HICON__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
圖標(biāo)的句柄
|
HIMAGELIST
|
_IMAGELIST結(jié)構(gòu)體指針
|
|
_IMAGELIST *→HIMAGELIST
|
圖片列表的句柄
|
HIMC
|
HIMC__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
輸入上下文的句柄
|
HINSTANCE
|
HINSTANCE__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
實例的句柄
|
|
?
續(xù)表
INT
|
int
|
*
|
int→INT
|
32位有符號整數(shù)
|
INT_PTR
|
int(_W64 int即__w64 int)
|
*
|
_W64 int→INT_PTR,_W64就是__w64,是為了解決32位與64位編譯器的兼容性而設(shè)置的關(guān)鍵字
|
用于指針運算
|
INT32
|
signed int
|
*
|
signed int→INT32
|
32位有符號整數(shù)
|
INT64
|
signed __int64
|
8
|
signed __int64→INT64
|
64位有符號整數(shù)
|
LANGID
|
unsigned short
|
2
|
unsigned short→WORD→LANGID
|
語言標(biāo)識符
|
LCID
|
unsigned long
|
4
|
unsigned long→DWORD→LCID
|
Locale identifier.
|
LCTYPE
|
unsigned long
|
4
|
unsigned long→DWORD→LCTYPE
|
Locale information type.?
|
LONG
|
long
|
4
|
long→LONG
|
32位有符號整數(shù)
|
LONG_PTR
|
long
|
4
|
_W64 long→LONG_PTR
|
用于指針運算
|
LONG32
|
signed int
|
*
|
signed int→LONG32
|
32位有符號整數(shù)
|
LONG64
|
__int64
|
8
|
__int64→LONG64
|
64位有符號整數(shù)
|
LONGLONG
|
__int64
|
8
|
__int64→LONGLONG
|
64位有符號整數(shù)
|
LPARAM
|
long
|
4
|
_W64 long→LONG_PTR→LPARAM
|
消息的參數(shù)
|
LPBOOL
|
int *
|
|
int→BOOL, BOOL far *→LPBOOL
|
BOOL類型的指針
|
LPBYTE
|
unsigned char *
|
|
unsigned char→BYTE,BYTE far *→LPBYTE
|
BYTE類型的指針
|
LPCOLORREF
|
unsigned long *
|
|
unsigned long→WORD,DWORD *→LPCOLORREF
|
顏色值的指針
|
LPCRITICAL_SECTION
|
RTL_CRITICAL_SECTION結(jié)構(gòu)體指針
|
|
RTL_CRITICAL_SECTION *PRTL_CRITICAL_SECTION→,PRTL_CRITICAL_SECTION→LPCRITICAL_SECTION
|
CRITICAL_SECTION的指針
|
LPCSTR
|
靜態(tài)char *
|
|
char→CHAR,CONST CHAR *→LPCSTR
|
靜態(tài)8位Windows字符(ANSI)無終結(jié)字符串指針
|
LPCTSTR
|
靜態(tài)wchar_t *
|
|
wchar_t→WCHAR,CONST WCHAR *→LPCWSTR,LPCWSTR→LPCTSTR
|
如果UNICODE已定義則為LPCWSTR,否則為LPCTSTR
|
LPCVOID
|
靜態(tài)void *
|
|
CONST void far *→LPCVOID
|
任何類型的靜態(tài)指針
|
LPCWSTR
|
靜態(tài)wchar_t *
|
|
wchar_t→WCHAR,CONST WCHAR *→LPCWSTR
|
靜態(tài)16位Windows字符(Unicode)無終結(jié)字符串指針
|
LPDWORD
|
unsigned long *
|
|
unsigned long→DWORD,DWORD far *→LPDWORD
|
DWORD的指針
|
LPHANDLE
|
指向句柄的指針
|
|
void *→HANDLE,HANDLE FAR *→LPHANDLE
|
HANDLE的指針
|
LPINT
|
int *
|
|
int far *→LPINT
|
INT的指針
|
LPLONG
|
long *
|
|
long far *→LPLONG
|
LONG的指針
|
LPSTR
|
char *
|
|
char→CHAR,CHAR *→LPSTR
|
8位Windows字符(ANSI)無終結(jié)字符串指針
|
LPTSTR
|
wchar_t *
|
|
wchar_t WCHAR,WCHAR *→LPWSTR,LPWSTR→LPTSTR
|
An LPWSTR if UNICODE is defined, an LPSTR otherwise.
|
LPVOID
|
void *
|
|
void far *→LPVOID
|
任何類型的指針
|
LPWORD
|
unsigned short *
|
|
unsigned short→WORD,WORD far *→LPWORD
|
WORD的指針
|
LPWSTR
|
wchar_t *
|
|
wchar_t→WCHAR,WCHAR *→LPWSTR
|
16位Windows字符(ANSI)無終結(jié)字符串指針
|
LRESULT
|
long
|
4
|
_W64 long→LONG_PTR→LRESULT
|
有符號的消息處理結(jié)果
|
LUID
|
LUID結(jié)構(gòu)
|
|
|
局部唯一標(biāo)識符
|
PBOOL
|
int *
|
|
int→BOOL,BOOL near *→PBOOL
|
BOOL的指針
|
PBOOLEAN
|
unsigned char *
|
|
unsigned char→BYTE→BOOLEAN,BOOLEAN *→PBOOLEAN
|
BOOL的指針
|
PBYTE
|
unsigned char *
|
|
unsigned char→BYTE,BYTE near *→PBYTE
|
BYTE的指針
|
PCHAR
|
char *
|
|
char→CHAR,CHAR *→PCHAR
|
CHAR的指針
|
PCRITICAL_SECTION
|
RTL_CRITICAL_SECTION結(jié)構(gòu)體指針
|
|
?
續(xù)表
POINTER_32
|
void *
|
|
void *→POINTER_32
|
32位指針(詳解略)
|
POINTER_64
|
void *
|
|
void *→POINTER_64
|
64位指針(詳解略)
|
PSHORT
|
short *
|
|
short→SHORT,SHORT *→PSHORT
|
SHORT的指針
|
PSTR
|
char *
|
|
char→CHAR,CHAR *→PSTR
|
8位Windows字符(ANSI)無終結(jié)字符串指針
|
PTBYTE
|
wchar_t *
|
|
wchar_t→WCHAR,WCHAR *→PTBYTE
|
TBYTE的指針
|
PTCHAR
|
wchar_t *
|
|
wchar_t→WCHAR,WCHAR *→PTCHAR
|
TCHAR的指針
|
PTSTR
|
wchar_t *
|
|
wchar_t→WCHAR,WCHAR *→LPWSTR→PTSTR
|
PWSTR if UNICODE is defined, a PSTR otherwise.
|
PTBYTE
|
wchar_t *
|
|
wchar_t→WCHAR,WCHAR *→PTBYTE
|
TBYTE的指針
|
PTCHAR
|
wchar_t *
|
|
wchar_t→WCHAR,WCHAR *→PTCHAR
|
TCHAR的指針
|
PTSTR
|
wchar_t *
|
|
wchar_t→WCHAR,WCHAR *→LPWSTR→PTSTR
|
A PWSTR if UNICODE is defined, a PSTR otherwise.
|
PUCHAR
|
unsigned char *
|
|
unsigned char→UCHAR,UCHAR *→PUCHAR
|
UCHAR的指針
|
PUINT
|
unsigned int *
|
|
unsigned int *→PUINT(呵呵,為什么不用UINT*來定義呢?)
|
UINT的指針
|
PULONG
|
unsigned long *
|
|
unsigned long→ULONG,ULONG *→PULONG
|
ULONG的指針
|
PUSHORT
|
unsigned short *
|
|
unsigned short→USHORT,USHORT *→PUSHORT
|
USHORT的指針
|
PVOID
|
void *
|
|
void *→PVOID
|
任何類型的指針
|
PWCHAR
|
wchar_t *
|
|
wchar_t→WCHAR,WCHAR *→PWCHAR
|
WCHAR的指針
|
PWORD
|
unsigned short *
|
|
unsigned short→WORD,WORD near *→PWORD
|
WORD的指針
|
PWSTR
|
wchar_t *
|
|
wchar_t→WCHAR,WCHAR *→PWSTR
|
16位Windows字符(Unicode)無終結(jié)字符串指針
|
REGSAM
|
unsigned long
|
|
unsigned long→DWORD→ACCESS_MASK→REGSAM
|
注冊表值的安全訪問掩碼
|
SC_HANDLE
|
SC_HANDLE__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
Handle to a service control manager database.
|
SC_LOCK
|
void *
|
|
void far *→LPVOID→SC_LOCK
|
Handle to a service control manager database lock.?
|
SERVICE_STATUS_HANDLE
|
SERVICE_STATUS_HANDLE__結(jié)構(gòu)體指針
|
|
由DECLARE_HANDLE(name)宏定義……
|
Handle to a service status value.?
|
SHORT
|
short
|
2
|
short→SHORT
|
短整數(shù)類型(16位)
|
SIZE_T
|
unsigned long
|
4
|
unsigned long→ULONG_PTR→SIZE_T
|
指針可指向的最大字節(jié)數(shù)
|
SSIZE_T
|
long
|
|
_W64 long→LONG_PTR→SSIZE_T
|
有符號SIZE_T.
|
TBYTE
|
wchar_t
|
2
|
wchar_t→WCHAR,WCHAR→TBYTE
|
如果UNICODE已定義則為WCHAR,否則為CHAR
|
TCHAR
|
wchar_t
|
2
|
wchar_t→WCHAR,WCHAR→TCHAR
|
如果UNICODE已定義則為WCHAR,否則為CHAR
|
UCHAR
|
unsigned char
|
1
|
unsigned char→UCHAR
|
無符號CHAR
|
UINT
|
unsigned int
|
*
|
unsigned int→UINT
|
無符號INT
|
UINT_PTR
|
unsigned int
|
*
|
unsigned int→UINT_PTR
|
無符號INT_PTR.
|
UINT32
|
unsigned int
|
2
|
unsigned int→UINT32
|
無符號INT32.
|
UINT64
|
unsigned __int64
|
4
|
unsigned __int64→UINT64
|
無符號INT64.
|
ULONG
|
unsigned long
|
4
|
unsigned long→ULONG
|
無符號LONG.
|
|
?
最后這張表是Visual C++ 7.1編譯器支持的數(shù)據(jù)類型,也就是Windows各種數(shù)據(jù)類型的“根源”了。
數(shù)據(jù)類型名稱
|
字節(jié)數(shù)
|
別名
|
取值范圍
|
int
|
*
|
signed,signed int
|
由操作系統(tǒng)決定,即與操作系統(tǒng)的"字長"有關(guān)
|
unsigned int
|
*
|
unsigned
|
由操作系統(tǒng)決定,即與操作系統(tǒng)的"字長"有關(guān)
|
__int8
|
1
|
char,signed char
|
–128 到 127
|
__int16
|
2
|
short,short int,signed short int
|
–32,768 到 32,767
|
__int32
|
4
|
signed,signed int
|
–2,147,483,648 到 2,147,483,647
|
__int64
|
8
|
無
|
–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
|
bool
|
1
|
無
|
false 或 true
|
char
|
1
|
signed char
|
–128 到 127
|
unsigned char
|
1
|
無
|
0 到 255
|
short
|
2
|
short int,signed short int
|
–32,768 到 32,767
|
unsigned short
|
2
|
unsigned short int
|
0 到 65,535
|
long
|
4
|
long int,signed long int
|
–2,147,483,648 到 2,147,483,647
|
long long
|
8
|
none (but equivalent to __int64)
|
–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
|
unsigned long
|
4
|
unsigned long int
|