前言
微软一直想制定一些标准 ,来绑架程序员,来统一 c c++的目的 目前还没达到,但是引发了各种问题
自己的类型 windows Data Types
1、认为 c语言无法正确表示他的语义 所以定义了大量的自己的类型
所以
只有用微软的 sdk的时候才能使用的类型 并非 c c++通用
2、他所有的数据类型都是对c语言的数据类型进行在包装,或结构体包装
bit 是一个位
byte 基础单元 8位
__int8 8位的int
__int16 16位的int
__int32 32位的int
__int64 64位的int
BOOL typedef int BOOL 它是32位的bool
BOOLEAN typedef BYTE BOOLEAN 它是8位的bool
wchar_t typedef unsigned short wchar_t
CHAR typedef char CHAR
BYTE typedef unsigned char BYTE 表示数据长度8位
WORD unsigned short 表示数据长度16位
DWORD typedef unsigned long 表示数据长度32位
DWORD_PTR 表示 32位地址值
HANDLE typedef void *HANDLE; 句柄
HRESULT typedef long HRESULT; 表示返回值这只是数据的一小部分常用的 详细的 请看文档 [MS-DTYP]-151016 下载链接
点击打开链接
3、那些坑
PFLOAT num = 10000.00;//不能复制 只能申请空间
PFLOAT num =malloc(sizeof(PFLOAT));
//float *num =malloc(sizeof(float*));//很坑
*num = 1.000;
free(num);
------------------------------------------------
DWORD_PTR 和 DWORD一样 表示 32位地址值所以再次赋值的时候需要强制转换
DWORD_PTR dpDemo =num;
*(PFLOAT)dpDemo =20;
*
*32位系统下,内存地址值的长度 32位 ->DWORD_PTR(存储地址值)
*64位系统时,内存长度变成了 64位 DWORD_PTR 64位 为了向后兼容
*作用 做偏移计算
*取值 *(PFLOAT)dpDemo =300;
*
*
*
*这么愚蠢的东西 不用不就好了 少年你太天真了
* API有的函数返回值或参数就是 这个类型。。。
4、微软的命名规则
PBYTE
前面加了一个P代表是一个指针 point
LP
L 是long
WCHAR
C 是 const
WCHAR 是 字符
PWCHAR 是字符指针
STR 代表字符串
W 宽
A 窄
T 模板
根据工程而定 unicode ->TCHAR->wchar_t
否则 ->CHAR->char
如果设置 根据 字符集来设置
设计理念是很好的 但是实际上没有做到 没有什么用
5.不知道真假的黑历史
DWORD32 。。。等等 直接当做int用
DWORD64
据说 有一期 是外包到 印度 所以变成这样。。