Windows数据类型探幽

Windows 数据类型(一)

 

  由微软 Windows 操作系统所支持的各种数据类型是用来定义函数的返回值、函数和消息的参数以及结构体成员(因为 Win32 程序是用 C 语言来编写,所以没有“类”这个概念)的。这些数据类型定义了上述元素的尺码(在内存中的,也就是占用内存的字节数)和含义。笔者以前一直不太注意这些东西,结果在程序设计时可谓步履维艰。不同类型的常 / 变量,在程序用扮演的角色相去甚远,了解这些类型,对剖析程序的工作原理是非常有用的。今天又是周末,我把这些类型列出来,然后把它们的“原形”也找出来——是不是很像“照妖镜”呀。

       下面这张表里包括这些类型:字符类型( character ),整数类型( integer ),逻辑值类型(布尔型,海峡那边的兄弟们喜欢叫“布林型”, Boolean ),指针类型( pointer ),句柄型( handle )。其中,字符类型、整数类型和逻辑值(布尔)类型是 C 语言编译器通用的,也就是与标准 C 语言一样。大多数指针类型都是以 ( 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)宏定义…… 实例的句柄

 

续表

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结构体指针  

 

续表

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.

 

最后这张表是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
时间: 2024-09-26 12:37:03

Windows数据类型探幽的相关文章

Windows数据类型

 WORD:16位无符号整形数据   DWORD:32字节无符号整型数据(DWORD32)   DWORD64:64字节无符号整型数据   INT:32位有符号整型数据类型   INT_PTR:指向INT数据类型的指针类型   INT32:32位符号整型   INT64:64位符号整型   UINT:无符号INT LONG:32位符号整型(LONG32)   ULONG:无符号LONG LONGLONG:64位符号整型(LONG64)   SHORT:无符号短整型(16位)   LPARAM:消

API入门系列之一 -那‘烦人’的Windows数据类型

Hello Everybody This is beyondcode 大家好 再次自我介绍一下 我是beyondcode, 这次心 血来潮, 计划着做一系列关于Windows API 编程的教程,用于帮助一些在Windows API编程上有疑惑的, 纳闷的,迷惑的新手朋友们. 先解释一些术语或名词吧 SDK是Software Development Kit的简写,也就是软件开发包的意思,其中就包含了我们写程序要用 到的一些头文件,库,工具,帮助文档之类的. Windows API编程是指调用Wi

Linux下定义Windows常用数据类型

  将一个Windows程序移植到Linux上,发现两个操作系统对很多数据类型的命名方式区别很大,比如Windows下对于无符号数据类型一般用U+x的方式,像UINT.UCHAR.ULONG,而Linux上就要中规中矩,都是unsigned +x;另外,还有一些数据类型是Windows有,而Linux没有的,像DWORD.HANDLE.LPSTR等等.于是我写了一个Windows数据类型在Linux下进行转换的头文件 <p> #define INVALID_HANDLE_VALUE -1 &l

Windows API 的数据类型与 Delphi 数据类型对照表

原文:Windows API 的数据类型与 Delphi 数据类型对照表 Windows 数据类型 Delphi 数据类型 描述 LPSTR PAnsiChar 字符串指针 LPCSTR PAnsiChar 字符串指针 DWORD LongWord 整数 BOOL LongBool 布尔型 PBOOL ^BOOL 指向布尔值的指针 PByte ^Byte 指向字节值的指针 PINT ^Integer 指向整数值的指针 PSingle ^Single 指向单精度浮点值的指针 PWORD ^Word

CreateThread、_beginthreadex和AfxBeginThread 的区别

CreateThread._beginthreadex和AfxBeginThread 创建线程好几个函数可以使用,可是它们有什么区别,适用于什么情况呢?参考了一些资料,写得都挺好的,这里做一些摘抄和整合. [参考1]CreateThread, AfxBeginThread,_beginthread, _beginthreadex的区别 ===================================================================== 1.CreateThr

了解WINDOWS API基本数据类型

代码: 1 /*header file*/ 2 #include <Windows.h> 3 #include <stdio.h> 4 5 /*function windows data type demo*/ 6 7 int WINAPI WinMain( 8 HINSTANCE hInstance, 9 HINSTANCE hPrevInstance, 10 LPSTR lpCmdLine, 11 int nCmdShow 12 ) 13 { 14 //define strin

WINDOWS基本数据类型示例

最近也学学这些,争取把所有东东都串起来. #include <Windows.h> #include <stdio.h> int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE PrevInstance, LPSTR lpCmdLine, int nCmdShow ) { LPSTR szString = "WINDOWS DATA TYPE, STRING"; CHAR lpString[120]; DWORD d

C#中调用Windows API时的数据类型对应关系

BOOL=System.Int32 BOOLEAN=System.Int32 BYTE=System.UInt16 CHAR=System.Int16 COLORREF=System.UInt32 DWORD=System.UInt32 DWORD32=System.UInt32 DWORD64=System.UInt64 FLOAT=System.Float HACCEL=System.IntPtr HANDLE=System.IntPtr HBITMAP=System.IntPtr HBRU

Windows NT服务器维护经验

window|服务器 中国人民银行县支行服务器(Windows NT)一般既作为单位内部局域网的域控制器,又担负着网上公文处理.共享资源管理和收发电子邮件等重要任务,做好其日常维护工作具有重要意义.经过认真探索实践,笔者在工作中总结出以下经验与各位读者共享. 系统的自动登录通常情况下,用户在进入Win NT网络之前必须输入用户名称以及口令.为简化开机过程,可在启动时自动以某一个组的用户名称和口令来访问Win NT,而不需要通过人工设置的方法来输入登录参数.操作如下: 1.打开注册表编辑器,并在编