前言
微软一直想制定一些标准 ,来绑架程序员,来统一 c c++的目的 目前还没达到,但是引发了各种问题
自己的类型 windows Data Types
1、认为 c语言无法正确表示他的语义 所以定义了大量的自己的类型
所以 只有用微软的 sdk的时候才能使用的类型 并非 c c++通用
2、他所有的数据类型都是对c语言的数据类型进行在包装,或结构体包装
这只是数据的一小部分常用的 详细的 请看文档 [MS-DTYP]-151016 下载链接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; 表示返回值
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 据说 有一期 是外包到 印度 所以变成这样。。