Windows数据类型(FantasiaX原创)

灰太狼 2022-09-17 15:27 239阅读 0赞

由微软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结构体指针   由DECLAREHANDLE(name)宏定义…… 动态数据交换(DDE)会话的句柄
HCONVLIST HCONVLIST结构体指针   由DECLARE_HANDLE(name)宏定义…… 动态数据交换(DDE)会话列表的句柄
HCURSOR HICON结构体指针   HICON *→HICON→HCURSOR 光标的句柄
HDC HDC结构体指针   由DECLAREHANDLE(name)宏定义…… 设备上下文(DC)的句柄
HDDEDATA HDDEDATA结构体指针   由DECLARE_HANDLE(name)宏定义…… 动态数据交换数据的句柄
HDESK HDESK结构体指针   由DECLAREHANDLE(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结构体指针   由DECLAREHANDLE(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结构体指针   由DECLAREHANDLE(name)宏定义…… 实例的句柄
HKEY HKEY结构体指针   由DECLARE_HANDLE(name)宏定义……(另有一条路径,一样) 注册表键的句柄
HKL HKL结构体指针   由DECLAREHANDLE(name)宏定义…… 输入点标识符
HLOCAL void (一个地址)   void →HANDLE→HLOCAL 本地内存块的句柄
HMENU HMENU结构体指针   由DECLARE_HANDLE(name)宏定义…… 菜单的句柄
HMETAFILE HMETAFILE结构体指针   由DECLAREHANDLE(name)宏定义…… 图元文件的句柄
HMODULE HINSTANCE结构体指针   HINSTANCE*→HINSTANCE→HMODULE 模块的句柄。值由模块的位置来决定。
HMONITOR HMONITOR结构体指针   由DECLARE_HANDLE(name)宏定义…… 显示器的句柄
HPALETTE HPALETTE结构体指针   由DECLAREHANDLE(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→INTPTR,_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的指针























































































































































































































































































































POINTER32 void   void →POINTER32 32位指针(详解略)
POINTER64 void   void →POINTER64 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
  在列表中,是按前半部分的宏定义而写的,请大家注意。

最后这张表是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

发表评论

表情:
评论列表 (有 0 条评论,239人围观)

还没有评论,来说两句吧...

相关阅读

    相关 []-数据仓库任务调度

    ![format_png][] 概述 随着数据仓库的开发,ETL作业会越来越多,怎么把这些作业有序的运行起来,就需要一个健壮的调度系统来保证数据能够准确、及时的提供给B

    相关 Windows数据类型(FantasiaX)

    由微软Windows操作系统所支持的各种数据类型是用来定义函数的返回值、函数和消息的参数以及结构体成员(因为Win32程序是用C语言来编写,所以没有“类”这个概念)的。这些数据