Windows Data Types
Windows操作系统所支持的各种数据类型是用来定义函数的返回值、函数和消息的参数以及结构体成员(因为Win32变量,在程序用扮演的角色相去甚远,了解这些类型,对剖析程序的工作原理是非常有用的。今天又是周末,我把这些类型列出来,然后把它们的“原形”也找出来——是不是很像“照妖镜”呀。
),逻辑值类型(布尔型,海峡那边的兄弟们喜欢叫“布林型”,Boolean)。其中,字符类型、整数类型和逻辑值(布尔)类型是C(Pointer)前缀开头。“句柄”是指被装载进内存的一个资源(本质而言就是指一定范围内的唯一编号)。
<span times="" new="" roman';="" mso-hansi-font-family:="" 'times="" roman'"="" style="padding: 0px; margin: 0px; font-family: 宋体; "> 下面这张表是我结合MSDN里的资料制作的,因为自己也是初学,做的还比较粗糙,请大家多多指正:)
<span times="" new="" roman';="" mso-hansi-font-family:="" 'times="" roman'"="" style="padding: 0px; margin: 0px; font-family: 宋体; ">
| 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)宏定义…… | 窗口的句柄 |
| INT | int | * | int→INT | 32位有符号整数 |
| INT_PTR | int(_W64 int即__w64 int) | * | _W64 int→INT_PTR,_W64就是__w64,是为了解决32位与64位编译器的兼容性而设置的关键字 | 用于指针运算 |
| INT32 | signed int | * | signed int→INT32 | 32位有符号整数 |
| INT64 | signed __int64 | 8 | signed __int64→INT64 | 64位有符号整数 |
| LANGID | unsigned short | 2 | unsigned short→WORD→LANGID | 语言标识符 |
| 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位有符号整数 |
| LONG_PTR | long | 4 | _W64 long→LONG_PTR | 用于指针运算 |
| LONG32 | signed int | * | signed int→LONG32 | 32位有符号整数 |
| LONG64 | __int64 | 8 | __int64→LONG64 | 64位有符号整数 |
| LONGLONG | __int64 | 8 | __int64→LONGLONG | 64位有符号整数 |
| LPARAM | long | 4 | _W64 long→LONG_PTR→LPARAM | 消息的参数 |
| 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结构体指针 | RTL_CRITICAL_SECTION *PRTL_CRITICAL_SECTION→,PRTL_CRITICAL_SECTION→LPCRITICAL_SECTION | CRITICAL_SECTION的指针 | |
| LPCSTR | 静态char * | char→CHAR,CONST CHAR *→LPCSTR | 静态8位Windows字符(ANSI)无终结字符串指针 | |
| LPCTSTR | 静态wchar_t * | wchar_t→WCHAR,CONST WCHAR *→LPCWSTR,LPCWSTR→LPCTSTR | 如果UNICODE已定义则为LPCWSTR,否则为LPCTSTR | |
| LPCVOID | 静态void * | CONST void far *→LPCVOID | 任何类型的静态指针 | |
| LPCWSTR | 静态wchar_t * | wchar_t→WCHAR,CONST WCHAR *→LPCWSTR | 静态16位Windows字符(Unicode)无终结字符串指针 | |
| 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)无终结字符串指针 | |
| 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)无终结字符串指针 | |
| LRESULT | long | 4 | _W64 long→LONG_PTR→LRESULT | 有符号的消息处理结果 |
| LUID | LUID结构 | 局部唯一标识符 | ||
| 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结构体指针 | RTL_CRITICAL_SECTION *→PRTL_CRITICAL_SECTION,PRTL_CRITICAL_SECTION→PCRITICAL_SECTION | CRITICAL_SECTION的指针 | |
| PCSTR | 静态char * | char→CHAR,CONST CHAR *→PCSTR | 静态8位Windows字符(ANSI)无终结字符串指针 | |
| PCTSTR | 静态wchar_t * | wchar_t→WCHAR,CONST WCHAR *→LPCWSTR,LPCWSTR→PCTSTR | 如果UNICODE已定义则为PCWSTR,否则为PCSTR | |
| PCWCH | 静态wchar_t * | wchar_t→WCHAR,CONST WCHAR *→PCWCH | WCHAR的静态指针 | |
| PCWSTR | 静态wchar_t * | wchar_t→WCHAR,CONST WCHAR *→PCWSTR | 静态16位Windows字符(Unicode)无终结字符串指针 | |
| PDWORD | unsigned long * | unsigned long→DWORD,DWORD near *→PDWORD | DWORD的指针 | |
| PFLOAT | float * | float→FLOAT,FLOAT *→PFLOAT | FLOAT的指针 | |
| PHANDLE | 指向句柄的指针 | void *→HANDLE,HANDLE *→PHANDLE | HANDLE的指针 | |
| PHKEY | 指向HKEY的指针 | HKEY__ *→HKEY *→PHKEY | HKEY的指针 | |
| PINT | int * | int near *→PINT | INT的指针 | |
| PLCID | unsigned long * | unsigned long→DWORD,DWORD near *→PDWORD→PLCID | LCID的指针 | |
| PLONG | long * | long→LONG,LONG *→PLONG | LONG的指针 | |
| PLUID | LUID结构体指针 | LUID *→PLUID | LUID的指针 |
最后这张表是Visual C++ 7.1编译器支持的数据类型,也就是Windows各种数据类型的“根源”了。
| 数据类型名称 | 字节数 | 别名 | 取值范围 |
| int | * | signed,signed int | 由操作系统决定,即与操作系统的"字长"有关 |
| unsigned int | * | unsigned | 由操作系统决定,即与操作系统的"字长"有关 |
| __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 | 0 到 4,294,967,295 |
| enum | * | 无 | 由操作系统决定,即与操作系统的"字长"有关 |
| float | 4 | 无 | 3.4E +/- 38 (7 digits) |
| double | 8 | 无 | 1.7E +/- 308 (15 digits) |
| long double | 8 | 无 | 1.7E +/- 308 (15 digits) |
| wchar_t | 2 | __wchar_t | 0 到 65,535 |
本文详细介绍了Windows操作系统中各种数据类型,包括它们的本质类型、字节数、定义过程及含义等。通过对比MSDN资料,帮助读者更好地理解这些类型在实际编程中的应用。
2699

被折叠的 条评论
为什么被折叠?



