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 signed __int64→INT64 64位有符号整数
LANGID unsigned short unsigned short→WORD→LANGID 语言标识符
LCID unsigned long unsigned long→DWORD→LCID Locale identifier.
LCTYPE unsigned long unsigned long→DWORD→LCTYPE Locale information type. 
LONG long long→LONG 32位有符号整数
LONG_PTR long _W64 long→LONG_PTR 用于指针运算
LONG32 signed int * signed int→LONG32 32位有符号整数
LONG64 __int64 __int64→LONG64 64位有符号整数
LONGLONG __int64 __int64→LONGLONG 64位有符号整数
LPARAM long _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 _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,如需转载请自行联系原作者

Windows数据类型探幽——千回百转你是谁?----转载的更多相关文章

  1. Windows数据类型

    WORD:16位无符号整形数据 DWORD:32字节无符号整型数据(DWORD32) DWORD64:64字节无符号整型数据 INT:32位有符号整型数据类型 INT_PTR:指向INT数据类型的指针 ...

  2. 1-4-2 Windows数据类型与重要数据结构

    主要内容:介绍Windows数据类型与重要数据结构 1.数据类型 在Windows系统中定义了Windows应用程序中包含种类繁多的数据类型, 部分如下: WORD 16位无符号整数 typedef ...

  3. 学习:Windows数据类型

    WINDOWS API中出现的常见的数据类型有以下几种: 1.DWORD:DWORD用于表示无符号整型的数据类型,实际名为double word,32位 2.HANDLE:HANDLE为32位的数据类 ...

  4. Redis进阶实践之三如何在Windows系统上安装安装Redis(转载)

    Redis进阶实践之三如何在Windows系统上安装安装Redis 一.Redis的简介 Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括 ...

  5. windows服务与自启动程序的区别(转载)

    转载:http://blog.csdn.net/anddy926/article/details/8464142 在客户端服务器项目实践中,作为服务端必须保持程序的24小时不间断运行,需要做一个监控, ...

  6. Windows中的时间(SYSTEMTIME和FILETIME) (转载)

    转载:http://blog.csdn.net/bokee/article/details/5330791 两种时间系统之间没有本质区别(事实上CRT时间是用Windows时间实现的,当然这是说的VC ...

  7. 在 Windows Server 上搭建 *** 服务端(转载加亲测)

    转载自:https://diveng.io/build-shadowsocks-server-on-windows-server.html 下面的教程建议大家使用第一种方法安装,说是比较简单.我则使用 ...

  8. 在Windows中实现Java调用DLL(转载)

    本文提供调用本地 C 代码的 Java 代码示例,包括传递和返回某些常用的数据类型.本地方法包含在特定于平台的可执行文件中.就本文中的示例而言,本地方法包含在 Windows 32 位动态链接库 (D ...

  9. Windows注册表内容详解(转载)

    (关于windows注册表的整理,来源网络) 前提 一.什么是注册表 ​ 注册表是windows操作系统.硬件设备以及客户应用程序得以正常运行和保存设置的核心"数据库",也可以说是 ...

随机推荐

  1. JS中的 '+' 号

    当用作单目操作符的时候,+操作符不会对Number类型产生影响.但如果应用在字符串类型上,会将其转换为数字: var a = 25;a =+ a; //对a值没有影响console.log(a); / ...

  2. 计算机二级-C语言-程序填空题-190110记录-文件写入与文件读出显示

    //给定程序功能是:从键盘输入若干行文本(每行不超过80个字符),写到文件myfile4.txt中,用-1(独立一行)作为字符串输入结束的标志,然后将文件的内容读到显示在屏幕上.文件的读写分别由自定义 ...

  3. Fluent_Python_Part2数据结构,02-array-seq,序列类型

    1. 序列数据 例如字符串.列表.字节序列.元组.XML元素.数据库查询结果等,在Python中用统一的风格去处理.例如,迭代.切片.排序.拼接等. 2. 容器序列与扁平序列 容器序列:容器对象包含任 ...

  4. centos 6.x 启动过程简介(来自老男孩)

  5. web渗透(转)

    某天比较无聊,听一个朋友推荐httpscan这款工具,于是就下载下来试试. 首先对某学校网段开始进行测试. 1   python httpscan.py **.**.**.0/24 测试时发现有个比较 ...

  6. java.lang.NoClassDefFoundError异常处理

    1.异常信息: Caused by: java.lang.NoClassDefFoundError: com/pingan/cfss/monitor/user/controller/UserInfoC ...

  7. 使用 vant 的 v-lazy 实现图片 vue 在移动端的懒加载

    官方文档:https://youzan.github.io/vant/#/zh-CN/lazyload 引入 Lazyload 是 Vue 指令,使用前需要对指令进行注册 import Vue fro ...

  8. 新建文件的UID和GID

    默认情况下:新建文件的用户ID为操作当前文件进程的有效用户ID(参考以前文章),新建文件的组ID为操作当前文件的进程的有效组ID 特殊情况:当当前新建文件的目录的SET-GID位被设置时,那么新建文件 ...

  9. 吴裕雄--天生自然Numpy库学习笔记:NumPy 线性代数

    import numpy.matlib import numpy as np a = np.array([[1,2],[3,4]]) b = np.array([[11,12],[13,14]]) p ...

  10. Postgresql查询表和表结构

    查询表名 SELECT tablename FROM pg_tables WHERE tablename NOT LIKE 'pg%' AND tablename NOT LIKE 'sql_%' O ...