当前位置: 首页 > news >正文

Windows数据类型探幽——千回百转你是谁?(1)

Windows Data Types
Windows数据类型
 
  由微软Windows操作系统所支持的各种数据类型是用来定义函数的返回值、函数和消息的参数以及结构体成员(因为Win32程序是用C语言来编写,所以没有“类”这个概念)的。这些数据类型定义了上述元素的尺码(在内存中的,也就是占用内存的字节数)和含义。笔者以前一直不太注意这些东西,结果在程序设计时可谓步履维艰。不同类型的常/变量,在程序用扮演的角色相去甚远,了解这些类型,对剖析程序的工作原理是非常有用的。今天又是周末,我把这些类型列出来,然后把它们的“原形”也找出来——是不是很像“照妖镜”呀。
       下面这张表里包括这些类型:字符类型(character),整数类型(integer),逻辑值类型(布尔型,海峡那边的兄弟们喜欢叫“布林型”,Boolean),指针类型(pointer),句柄型(handle)。其中,字符类型、整数类型和逻辑值(布尔)类型是C语言编译器通用的,也就是与标准C语言一样。大多数指针类型都是以PPointer)或者LPLong Pointer)前缀开头。“句柄”是指被装载进内存的一个资源(本质而言就是指一定范围内的唯一编号)。
  下面这张表是我结合MSDN里的资料制作的,因为自己也是初学,做的还比较粗糙,请大家多多指正:)
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)宏定义……窗口的句柄

接下表




本文转自 水之真谛 51CTO博客,原文链接:http://blog.51cto.com/liutiemeng/18878,如需转载请自行联系原作者

相关文章:

  • 数据库连接错误: The provider did not return a ProviderManifestToken string.
  • C#编写的winform程序打包方法
  • 2017.11.14 小组第二次例会
  • 032 文本框中的时间格式
  • hdu 4012 Paint on a Wall
  • Android开发者指南(11) —— Optimizing Apps for Android 3.0
  • C#获取当前路径的7种方法
  • android116 轮播 viewPager实现
  • 参加虚拟化达人训练营的体会
  • 转载: 关于ruby中 %Q, %q, %W, %w, %x, %r, %s 的用法
  • django专题—安装、创建项目、添加应用
  • 自定义的asp.net翻页控件
  • python 数学运算符
  • 标题一定要长~~~~长~~~~~~~~~~~~~~长~~~~~~~~
  • python 中set模块的用法
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 【Amaple教程】5. 插件
  • JavaScript学习总结——原型
  • js如何打印object对象
  • Linux链接文件
  • redis学习笔记(三):列表、集合、有序集合
  • Spring Cloud Feign的两种使用姿势
  • webpack入门学习手记(二)
  • 阿里云前端周刊 - 第 26 期
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 测试如何在敏捷团队中工作?
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 前端技术周刊 2019-01-14:客户端存储
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 收藏好这篇,别再只说“数据劫持”了
  • 一起参Ember.js讨论、问答社区。
  • 硬币翻转问题,区间操作
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #includecmath
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (第二周)效能测试
  • (二)linux使用docker容器运行mysql
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • **CI中自动类加载的用法总结
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Micro Framework初体验
  • .Net 中Partitioner static与dynamic的性能对比
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [Android]创建TabBar
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [AutoSar]BSW_Com02 PDU详解
  • [BZOJ1178][Apio2009]CONVENTION会议中心