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. idea中springboot静态资源及页面跳转问题

    1,静态资源放在resources/static下,html页面放在resources/templates下 2,在html中引入静态资源时,不用带static(对于路径来说是透明的) 3, 配置ht ...

  2. Deepin-linux下的linux的终端下软件安装和卸载方法

    1.方法一: sudo apt update #最好第一步是它 sudo apt install <package_name> --no-upgrade #安装该package但是不升级. ...

  3. 吴裕雄 python 神经网络——TensorFlow训练神经网络:不使用指数衰减的学习率

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data INPUT_NODE = 784 ...

  4. 在VS2017配置OpenGL开发环境

    这个方法适合初学者使用,较为简单方便.第一,你的VS2017一定要安装了C/C++开发组件可以打开Visual Studio Installer来查看另外,确定你有安装NuGet包管理器,在单个组件中 ...

  5. Composer包收录

    doctrine/annotations #注解 nesbot/carbon #日期和时间处理 gregwar/captcha symfony/console nikic/fast-route #路由 ...

  6. Java语言特性、加载与执行

    [开源.免费.纯面向对象.跨平台] 简单性: 相对而言,例如,Java是不支持多继承的,C++是支持多继承的,多继承比较复杂:C++ 有指针,Java屏蔽了指针的概念.所以相对来说Java是简单的. ...

  7. Codeforces #590 D 二维树状数组

    题意 给一个10^5之内的字符串(小写字母)时限2s 输入n,有n个操作  (n<10^5) 当操作是1的时候,输入位置x和改变的字母 当操作是2的时候,输入区间l和r,有多少不同的字母 思路 ...

  8. codeforces- Shortest path of the king

    The king is left alone on the chessboard. In spite of this loneliness, he doesn't lose heart, becaus ...

  9. 【PAT甲级】1039 Course List for Student (25 分)(vector嵌套于map,段错误原因未知)

    题意: 输入两个正整数N和K(N<=40000,K<=2500),分别为学生和课程的数量.接下来输入K门课的信息,先输入每门课的ID再输入有多少学生选了这门课,接下来输入学生们的ID.最后 ...

  10. ES建立索引步骤, 1,index 2.mapping 3,别名

    1.建立索引PUT /index_trans_detail 2.建立mappingPOST /index_trans_detail/type_trans_detail/_mapping{ " ...