Windows数据类型探幽——千回百转你是谁?----转载

Windows数据类型探幽——千回百转你是谁?
原创 danis 发布于2007-01-29 20:40:00 阅读数 749 收藏
展开

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)宏定义……     窗口的句柄

接下表
————————————————
版权声明:本文为CSDN博主「danis」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fsc2988877/article/details/1497402

续表
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的指针

接下表
续表
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)无终结字符串指针
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)无终结字符串指针
REGSAM unsigned long   unsigned long→DWORD→ACCESS_MASK→REGSAM 注册表值的安全访问掩码
SC_HANDLE SC_HANDLE__结构体指针   由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__结构体指针   由DECLARE_HANDLE(name)宏定义…… Handle to a service status value. 
SHORT short 2 short→SHORT 短整数类型(16位)
SIZE_T unsigned long 4 unsigned long→ULONG_PTR→SIZE_T 指针可指向的最大字节数
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.
ULONG_PTR unsigned long 4 unsigned long→ULONG_PTR 无符号LONG_PTR.
ULONG32 unsigned int 2 unsigned int→ULONG32 无符号LONG32
ULONG64 unsigned __int64 4 unsigned __int64→ULONG64 无符号LONG64
ULONGLONG unsigned __int64 4 unsigned __int64→ULONGLONG 64位无符号整数
UNSIGNED 没查到,大家帮忙吧     无符号属性
USHORT unsigned short   unsigned short→USHORT 无符号SHORT类型
VOID void   void→VOID 任何类型
WCHAR wchar_t 2 wchar_t→WCHAR 16位Unicode字符
WINAPI __stdcall 调用 __stdcall→WINAPI 系统函数(API函数)调用约定
WORD unsigned short 2 unsigned short→WORD 16位无符号整数
WPARAM unsigned int * unsigned int→UINT_PTR→WPARAM 消息的参数
注:DECLARE_HANDLE宏的定义如下。
#ifdef STRICT
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; };
typedef struct name##__ *name

#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif

在列表中,是按前半部分的宏定义而写的,请大家注意。

Windows数据类型探幽——千回百转你是谁?(4)

 
余二五 2017-11-15 19:09:00 浏览538
最后这张表是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
  经过十多个小时的“奋战”,终于完成了:)
很开心。不过我知道,其中肯定有不完善甚至是错误的地方,请大家多多批评指正,在此先谢过大家。
 
 
 
 
本文转自 水之真谛 51CTO博客,原文链接:http://blog.51cto.com/liutiemeng/18880,如需转载请自行联系原作者
原文地址:https://www.cnblogs.com/bedfly/p/12147440.html