Windows Data Types
Windows数据类型
由微软Windows操作系统所支持的各种数据类型是用来定义函数的返回值、函数和消息的参数以及结构体成员(因为Win32程序是用C语言来编写,所以没有“类”这个概念)的。这些数据类型定义了上述元素的尺码(在内存中的,也就是占用内存的字节数)和含义。笔者以前一直不太注意这些东西,结果在程序设计时可谓步履维艰。不同类型的常/变量,在程序用扮演的角色相去甚远,了解这些类型,对剖析程序的工作原理是非常有用的。今天又是周末,我把这些类型列出来,然后把它们的“原形”也找出来——是不是很像“照妖镜”呀。
下面这张表里包括这些类型:字符类型(character),整数类型(integer),逻辑值类型(布尔型,海峡那边的兄弟们喜欢叫“布林型”,Boolean),指针类型(pointer),句柄型(handle)。其中,字符类型、整数类型和逻辑值(布尔)类型是C语言编译器通用的,也就是与标准C语言一样。大多数指针类型都是以P(Pointer)或者LP(Long Pointer)前缀开头。“句柄”是指被装载进内存的一个资源(本质而言就是指一定范围内的唯一编号)。
下面这张表是我结合MSDN里的资料制作的,因为自己也是初学,做的还比较粗糙,请大家多多指正:)
Windows数据类型
本质类型
字节数
定义过程(来历)
含义
ATOM
unsigned short
2
unsigned short→WORD→ATOM
在Atom表中,一键(16位整数)一值(一个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
字节型,8位。
CALLBACK
__stdcall
调用
__stdcall→CALLBACK
回调函数的调用约定
CHAR
char
1
char→CHAR
8位Windows字符(ANSI)
COLORREF
unsigned long
4
unsigned long→DWORD→COLORREF
红,绿,蓝(RGB)值
CONST
const
关键字
const→CONST
常量
CRITICAL_SECTION
RTL_CRITICAL_SECTION结构体
?
RTL_CRITICAL_SECTION(结构)→CRITICAL_SECTION
Critical-section对象
DWORD
unsigned long
4
unsigned long→DWORD
32位无符号整数
DWORD_PTR
unsigned long
4
unsigned long→ULONG_PTR→DWORD_PTR(另有其它路径)
略……(用处挺大,不过太长了)
DWORD32
unsigned int
*
unsigned int→DWORD32
32位无符号整数
DWORD64
unsigned __int64
8
unsigned __int64→DWORD64
64位无符号整数
FLOAT
float
4
float→FLOAT
浮点数变量
HACCEL
HACCEL__结构体指针
由DECLARE_HANDLE(name)宏定义的指向HACCEL__结构体的指针
快捷键列表的句柄
HANDLE
void *(一个地址)
void *→HANDLE
对象的句柄
HBITMAP
HBITMAP__结构体指针
由DECLARE_HANDLE(name)宏定义的指向HBITMAP__结构体的指针
位图的句柄
HBRUSH
HBRUSH__结构体指针
由DECLARE_HANDLE(name)宏定义……
画刷的句柄
HCONV
HCONV__结构体指针
由DECLARE_HANDLE(name)宏定义……
动态数据交换(DDE)会话的句柄
HCONVLIST
HCONVLIST__结构体指针
由DECLARE_HANDLE(name)宏定义……
动态数据交换(DDE)会话列表的句柄
HCURSOR
HICON__结构体指针
HICON__ *→HICON→HCURSOR
光标的句柄
HDC
HDC__结构体指针
由DECLARE_HANDLE(name)宏定义……
设备上下文(DC)的句柄
HDDEDATA
HDDEDATA__结构体指针
由DECLARE_HANDLE(name)宏定义……
动态数据交换数据的句柄
HDESK
HDESK__结构体指针
由DECLARE_HANDLE(name)宏定义……
桌面(Desktop)的句柄
HDROP
HDROP__结构体指针
由DECLARE_HANDLE(name)宏定义……
Handle to an internal drop structure.
HDWP
void *(一个地址)
void *→HANDLE→HDWP
Handle to a deferred window position structure.
HENHMETAFILE
HENHMETAFILE__结构体指针
由DECLARE_HANDLE(name)宏定义……
增强图元文件的句柄
HFILE
int
*
int→HFILE
由OpenFile(而不是CreateFile)打开的文件的句柄.
HFONT
HFONT__结构体指针
由DECLARE_HANDLE(name)宏定义……
字体的句柄
HGDIOBJ
void near *
void NEAR *→HGDIOBJ
GDI对象的句柄
HGLOBAL
void *(一个地址)
void *→HANDLE→HGLOBAL
全局内存块的句柄
HHOOK
HHOOK__结构体指针
由DECLARE_HANDLE(name)宏定义……
句子(hook)的句柄
HICON
HICON__结构体指针
由DECLARE_HANDLE(name)宏定义……
图标的句柄
HIMAGELIST
_IMAGELIST结构体指针
_IMAGELIST *→HIMAGELIST
图片列表的句柄
HIMC
HIMC__结构体指针
由DECLARE_HANDLE(name)宏定义……
输入上下文的句柄
HINSTANCE
HINSTANCE__结构体指针
由DECLARE_HANDLE(name)宏定义……
实例的句柄
HKEY
HKEY__结构体指针
由DECLARE_HANDLE(name)宏定义……(另有一条路径,一样)
注册表键的句柄
HKL
HKL__结构体指针
由DECLARE_HANDLE(name)宏定义……
输入点标识符
HLOCAL
void *(一个地址)
void *→HANDLE→HLOCAL
本地内存块的句柄
HMENU
HMENU__结构体指针
由DECLARE_HANDLE(name)宏定义……
菜单的句柄
HMETAFILE
HMETAFILE__结构体指针
由DECLARE_HANDLE(name)宏定义……
图元文件的句柄
HMODULE
HINSTANCE__结构体指针
HINSTANCE__*→HINSTANCE→HMODULE
模块的句柄。值由模块的位置来决定。
HMONITOR
HMONITOR__结构体指针
由DECLARE_HANDLE(name)宏定义……
显示器的句柄
HPALETTE
HPALETTE__结构体指针
由DECLARE_HANDLE(name)宏定义……
调色板的句柄
HPEN
HPEN__结构体指针
由DECLARE_HANDLE(name)宏定义……
画(线)笔的句柄
HRGN
HRGN__结构体指针
由DECLARE_HANDLE(name)宏定义……
区域的句柄
HRSRC
HRSRC__结构体指针
由DECLARE_HANDLE(name)宏定义……
资源的句柄
HSZ
HSZ__结构体指针
由DECLARE_HANDLE(name)宏定义……
动态数据交换(DDE)字符串的句柄
HWINSTA
HWINSTA__结构体指针
由DECLARE_HANDLE(name)宏定义……
窗口状态的句柄
HWND
HWND__结构体指针
由DECLARE_HANDLE(name)宏定义……
窗口的句柄
接下表