数据类型

本文详细介绍了Windows操作系统中各种数据类型,包括它们的本质类型、字节数、定义过程及含义等。通过对比MSDN资料,帮助读者更好地理解这些类型在实际编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Windows Data Types

Windows操作系统所支持的各种数据类型是用来定义函数的返回值、函数和消息的参数以及结构体成员(因为Win32变量,在程序用扮演的角色相去甚远,了解这些类型,对剖析程序的工作原理是非常有用的。今天又是周末,我把这些类型列出来,然后把它们的“原形”也找出来——是不是很像“照妖镜”呀。
       ),逻辑值类型(布尔型,海峡那边的兄弟们喜欢叫“布林型”,Boolean)。其中,字符类型、整数类型和逻辑值(布尔)类型是CPointer)前缀开头。“句柄”是指被装载进内存的一个资源(本质而言就是指一定范围内的唯一编号)。
<span times="" new="" roman';="" mso-hansi-font-family:="" 'times="" roman'"="" style="padding: 0px; margin: 0px; font-family: 宋体; ">   下面这张表是我结合MSDN里的资料制作的,因为自己也是初学,做的还比较粗糙,请大家多多指正:)
<span times="" new="" roman';="" mso-hansi-font-family:="" 'times="" roman'"="" style="padding: 0px; margin: 0px; font-family: 宋体; ">
Windows数据类型本质类型字节数定义过程(来历)含义
ATOMunsigned short2unsigned short→WORD→ATOM在Atom表中,一键(16位整数)一值(一个String)为一个Atom。
BOOLint*int→BOOL逻辑变量,布尔值 (取值为 TRUE 或 FALSE)
BOOLEANunsigned char1unsigned char→BYTE→BOOLEAN逻辑变量,布尔值 (取值为 TRUE 或 FALSE)
BYTEunsigned char1unsigned char→BYTE字节型,8位。
CALLBACK__stdcall调用__stdcall→CALLBACK回调函数的调用约定
CHARchar1char→CHAR8位Windows字符(ANSI)
COLORREFunsigned long4unsigned long→DWORD→COLORREF红,绿,蓝(RGB)值
CONSTconst关键字const→CONST常量
CRITICAL_SECTIONRTL_CRITICAL_SECTION结构体?RTL_CRITICAL_SECTION(结构)→CRITICAL_SECTIONCritical-section对象
DWORDunsigned long4unsigned long→DWORD32位无符号整数
DWORD_PTRunsigned long4unsigned long→ULONG_PTR→DWORD_PTR(另有其它路径)略……(用处挺大,不过太长了)
DWORD32unsigned int*unsigned int→DWORD3232位无符号整数
DWORD64unsigned __int648unsigned __int64→DWORD6464位无符号整数
FLOATfloat4float→FLOAT浮点数变量
HACCELHACCEL__结构体指针由DECLARE_HANDLE(name)宏定义的指向HACCEL__结构体的指针快捷键列表的句柄
HANDLEvoid *(一个地址)void *→HANDLE对象的句柄
HBITMAPHBITMAP__结构体指针由DECLARE_HANDLE(name)宏定义的指向HBITMAP__结构体的指针位图的句柄
HBRUSHHBRUSH__结构体指针由DECLARE_HANDLE(name)宏定义……画刷的句柄
HCONVHCONV__结构体指针由DECLARE_HANDLE(name)宏定义……动态数据交换(DDE)会话的句柄
HCONVLISTHCONVLIST__结构体指针由DECLARE_HANDLE(name)宏定义……动态数据交换(DDE)会话列表的句柄
HCURSORHICON__结构体指针HICON__ *→HICON→HCURSOR光标的句柄
HDCHDC__结构体指针由DECLARE_HANDLE(name)宏定义……设备上下文(DC)的句柄
HDDEDATAHDDEDATA__结构体指针由DECLARE_HANDLE(name)宏定义……动态数据交换数据的句柄
HDESKHDESK__结构体指针由DECLARE_HANDLE(name)宏定义……桌面(Desktop)的句柄
HDROPHDROP__结构体指针由DECLARE_HANDLE(name)宏定义……Handle to an internal drop structure.
HDWPvoid *(一个地址)void *→HANDLE→HDWPHandle to a deferred window position structure.
HENHMETAFILEHENHMETAFILE__结构体指针由DECLARE_HANDLE(name)宏定义……增强图元文件的句柄
HFILEint*int→HFILE由OpenFile(而不是CreateFile)打开的文件的句柄.
HFONTHFONT__结构体指针由DECLARE_HANDLE(name)宏定义……字体的句柄
HGDIOBJvoid near *void NEAR *→HGDIOBJGDI对象的句柄
HGLOBALvoid *(一个地址)void *→HANDLE→HGLOBAL全局内存块的句柄
HHOOKHHOOK__结构体指针由DECLARE_HANDLE(name)宏定义……句子(hook)的句柄
HICONHICON__结构体指针由DECLARE_HANDLE(name)宏定义……图标的句柄
HIMAGELIST_IMAGELIST结构体指针_IMAGELIST *→HIMAGELIST图片列表的句柄
HIMCHIMC__结构体指针由DECLARE_HANDLE(name)宏定义……输入上下文的句柄
HINSTANCEHINSTANCE__结构体指针由DECLARE_HANDLE(name)宏定义……实例的句柄
HKEYHKEY__结构体指针由DECLARE_HANDLE(name)宏定义……(另有一条路径,一样)注册表键的句柄
HKLHKL__结构体指针由DECLARE_HANDLE(name)宏定义……输入点标识符
HLOCALvoid *(一个地址)void *→HANDLE→HLOCAL本地内存块的句柄
HMENUHMENU__结构体指针由DECLARE_HANDLE(name)宏定义……菜单的句柄
HMETAFILEHMETAFILE__结构体指针由DECLARE_HANDLE(name)宏定义……图元文件的句柄
HMODULEHINSTANCE__结构体指针HINSTANCE__*→HINSTANCE→HMODULE模块的句柄。值由模块的位置来决定。
HMONITORHMONITOR__结构体指针由DECLARE_HANDLE(name)宏定义……显示器的句柄
HPALETTEHPALETTE__结构体指针由DECLARE_HANDLE(name)宏定义……调色板的句柄
HPENHPEN__结构体指针由DECLARE_HANDLE(name)宏定义……画(线)笔的句柄
HRGNHRGN__结构体指针由DECLARE_HANDLE(name)宏定义……区域的句柄
HRSRCHRSRC__结构体指针由DECLARE_HANDLE(name)宏定义……资源的句柄
HSZHSZ__结构体指针由DECLARE_HANDLE(name)宏定义……动态数据交换(DDE)字符串的句柄
HWINSTAHWINSTA__结构体指针由DECLARE_HANDLE(name)宏定义……窗口状态的句柄
HWNDHWND__结构体指针由DECLARE_HANDLE(name)宏定义……窗口的句柄
INTint*int→INT32位有符号整数
INT_PTRint(_W64 int即__w64 int)*_W64 int→INT_PTR,_W64就是__w64,是为了解决32位与64位编译器的兼容性而设置的关键字用于指针运算
INT32signed int*signed int→INT3232位有符号整数
INT64signed __int648signed __int64→INT6464位有符号整数
LANGIDunsigned short2unsigned short→WORD→LANGID语言标识符
LCIDunsigned long4unsigned long→DWORD→LCIDLocale identifier.
LCTYPEunsigned long4unsigned long→DWORD→LCTYPELocale information type. 
LONGlong4long→LONG32位有符号整数
LONG_PTRlong4_W64 long→LONG_PTR用于指针运算
LONG32signed int*signed int→LONG3232位有符号整数
LONG64__int648__int64→LONG6464位有符号整数
LONGLONG__int648__int64→LONGLONG64位有符号整数
LPARAMlong4_W64 long→LONG_PTR→LPARAM消息的参数
LPBOOLint *int→BOOL, BOOL far *→LPBOOLBOOL类型的指针
LPBYTEunsigned char *unsigned char→BYTE,BYTE far *→LPBYTEBYTE类型的指针
LPCOLORREFunsigned long *unsigned long→WORD,DWORD *→LPCOLORREF颜色值的指针
LPCRITICAL_SECTIONRTL_CRITICAL_SECTION结构体指针RTL_CRITICAL_SECTION *PRTL_CRITICAL_SECTION→,PRTL_CRITICAL_SECTION→LPCRITICAL_SECTIONCRITICAL_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)无终结字符串指针
LPDWORDunsigned long *unsigned long→DWORD,DWORD far *→LPDWORDDWORD的指针
LPHANDLE指向句柄的指针void *→HANDLE,HANDLE FAR *→LPHANDLEHANDLE的指针
LPINTint *int far *→LPINTINT的指针
LPLONGlong *long far *→LPLONGLONG的指针
LPSTRchar *char→CHAR,CHAR *→LPSTR8位Windows字符(ANSI)无终结字符串指针
LPTSTRwchar_t *wchar_t WCHAR,WCHAR *→LPWSTR,LPWSTR→LPTSTRAn LPWSTR if UNICODE is defined, an LPSTR otherwise.
LPVOIDvoid *void far *→LPVOID任何类型的指针
LPWORDunsigned short *unsigned short→WORD,WORD far *→LPWORDWORD的指针
LPWSTRwchar_t *wchar_t→WCHAR,WCHAR *→LPWSTR16位Windows字符(ANSI)无终结字符串指针
LRESULTlong4_W64 long→LONG_PTR→LRESULT有符号的消息处理结果
LUIDLUID结构局部唯一标识符
PBOOLint *int→BOOL,BOOL near *→PBOOLBOOL的指针
PBOOLEANunsigned char *unsigned char→BYTE→BOOLEAN,BOOLEAN *→PBOOLEANBOOL的指针
PBYTEunsigned char *unsigned char→BYTE,BYTE near *→PBYTEBYTE的指针
PCHARchar *char→CHAR,CHAR *→PCHARCHAR的指针
PCRITICAL_SECTIONRTL_CRITICAL_SECTION结构体指针RTL_CRITICAL_SECTION *→PRTL_CRITICAL_SECTION,PRTL_CRITICAL_SECTION→PCRITICAL_SECTIONCRITICAL_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 *→PCWCHWCHAR的静态指针
PCWSTR静态wchar_t *wchar_t→WCHAR,CONST WCHAR *→PCWSTR静态16位Windows字符(Unicode)无终结字符串指针
PDWORDunsigned long *unsigned long→DWORD,DWORD near *→PDWORDDWORD的指针
PFLOATfloat *float→FLOAT,FLOAT *→PFLOATFLOAT的指针
PHANDLE指向句柄的指针void *→HANDLE,HANDLE *→PHANDLEHANDLE的指针
PHKEY指向HKEY的指针HKEY__ *→HKEY *→PHKEYHKEY的指针
PINTint *int near *→PINTINT的指针
PLCIDunsigned long *unsigned long→DWORD,DWORD near *→PDWORD→PLCIDLCID的指针
PLONGlong *long→LONG,LONG *→PLONGLONG的指针
PLUIDLUID结构体指针LUID *→PLUIDLUID的指针

最后这张表是Visual C++ 7.1编译器支持的数据类型,也就是Windows各种数据类型的“根源”了。

数据类型名称字节数别名取值范围
int*signed,signed int由操作系统决定,即与操作系统的"字长"有关
unsigned int*unsigned由操作系统决定,即与操作系统的"字长"有关
__int81char,signed char–128 到 127
__int162short,short int,signed short int–32,768 到 32,767
__int324signed,signed int–2,147,483,648 到 2,147,483,647
__int648–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
bool1false 或 true
char1signed char–128 到 127
unsigned char10 到 255
short2short int,signed short int–32,768 到 32,767
unsigned short2unsigned short int0 到 65,535
long4long int,signed long int–2,147,483,648 到 2,147,483,647
long long8none (but equivalent to __int64)–9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long4unsigned long int0 到 4,294,967,295
enum*由操作系统决定,即与操作系统的"字长"有关
float43.4E +/- 38 (7 digits)
double81.7E +/- 308 (15 digits)
long double81.7E +/- 308 (15 digits)
wchar_t2__wchar_t0 到 65,535

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值