文章目录
前言
Windows 程序设计3:Windows编程常用的数据类型。
一、说明
1. 介绍
C/C++中有许多数据类型,如int, char, short, long, float, double, char*, int*, enum, struct, class等等。每种类型各有各的用途。
对于之前介绍的Windows程序入口点函数:
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPTSTR lpCmdLine, INT nShowCmd)
这里的数据类型对于编程新手来说很多都不认识,那么它们到底是什么数据类型呢?
这里可以通过右键数据类型,点击转到定义查看底层数据类型
如对于LPTSTR
可以看到在Unicode编码下,其本质上是一个宽字节的字符指针
2. Windows数据类型与C/C++数据类型的关系
其实可以发现,所有的Windows数据类型都是由C/C++数据类型经过类型重定义得到的。如:
DWORD实际上就是unsigned long
HANDLE实际上就是void*。。。等等
3. 为什么需要Windows数据类型
这是因为C/C++数据类型存在如下几个缺陷
1.数据类型与平台相关:在不同平台上,同一个数据类型占用空间大小可能不同,int在16位系统和short int相同;而在32为系统和long int 相同。
2.数据类型过于单一:在表现数值和布尔这两种情况时,虽然都是32位长度,但分开表达显然更加方便直观。
3.平台差异:一些类型在不同平台上的定义可能并不相同。
为了解决如上问题,微软利用typedef关键字,为很多常用的C/C++类型均定义了别名,这样一来,要解决源代码移植问题,只需要在目标平台上定义相同的一套类型别名,即可解决大部分问题。
4. Windows数据类型命名的规律
基本数据类型包括:BYTE(字节), CHAR(字符), WORD(单字), SHORT(短整型), INT(整形), STR(字符串)等等
指针类型的命名方式一般是在其指向的数据类型前加"LP"或"P",字母P就是指针Pointer的简写,比如指向DWORD的指针类型为LPDWORD和PDWORD。说明:LP是指在16位系统中的长指针,目前的32和64位系统已经不再区分,直接用P即可,LP在32或64位系统即为P。
各种句柄类型的命名方式一般都是在对象前加"H",即HANDLE的缩写,比如位图BITMAP对应的句柄类型为HBITMAP。
无符号类型一般是以U开头,是unsigned的简写,比如INT是符号类型,UINT是无符号类型。
常量类型一般带C,表示const。
二、常用的Windows编程数据类型
WORD:16位无符号整型数据
DWORD:32位无符号整型数据(DWORD32)
DWORD64:64位无符号整型数据
INT:32位有符号整形数据类型
INT_PTR:指向INT数据类型的指针类型
INT32:32位符号整型
INT64:64位符号整型
UINT:无符号INT
LONG:32位符号整型
ULONG:无符号LONG
LONGLONG:64位符号整型(LONG64)
LPARAM:消息的L参数
WPARAM:消息的W参数
HANDLE:对象句柄,最基本的句柄类型
HICON:图标的句柄
HINSTANCE:程序实例的句柄
HKEY:注册表键的句柄
HMODULE:模块的句柄
HWND:窗口的句柄
BOOL:布尔型变量
BYTE:字节类型(8位)
CONST:常量
FLOAT:浮点数据类型
SIZE_T:表示内存大小,以字节为单位,其最大值是CPU最大寻址范围
VOID:无类型
WINAPI:Windows API的函数调用方式,常见于SDK头文件中对API函数的声明,相当于_stdcall,更严格的说,这不是数据类型,而是一种函数调用约定。
LPSTR:字符指针,也就是字符串变量
LPCSTR:字符串常量
LPCTSTR:根据环境配置,如果定义了UNICODE宏,则是LPCWSTR类型;否则为LPCSTR类型
LPCWSTR:UNICODE字符串常量
LPDWORD:指向DWORD类型数据的指针
CHAR:8bit字节
TCHAR:如果定义了UNICODE,则为WCHAR;否则为CHAR
UCHAR:无符号CHAR
WCHAR:16位Unicode字符
总结
Windows 程序设计3:Windows编程常用的数据类型。