调试信息unused=???是什么意思?

mirroatl20 2012-11-12 11:41:51
rbbi.hbmBack = 0x5a053b7f {unused=??? }
...全文
336 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
redui 2012-11-13
  • 打赏
  • 举报
回复 1
这是系统句柄定义的一个小技巧,用来解决编译和类型转换的问题。 句柄本身只是一个无意义的整数,多数情况下HANDLE被定义成void*,但某些句柄之间有逻辑上的类似“继承”的关系,比如GDI中的资源对象句柄,“基类”句柄就是HGDIOBJ,“派生类”句柄包括HBITMAP/HICON/HFONT/HPEN/HBRUSH等等,它们都是HGDIOBJ句柄。如果还是采用void*的方式定义,句柄之间是可以随意转换类型的,为了让编译器能阻止某些句柄的随意转换,部分句柄不再采用void*方式定义,而是使用结构体指针,结构的好处是能派生,编译器可以实现合法的类型转换,同时阻止不合法的类型转换。 怎么定义代表句柄的结构体呢?因为句柄本身还是一个无意义的整数值,所以在结构体中定义任何成员都是无意义的,但是为了占位,在结构体中使用了一个unused成员,其实就是告诉你这个成员也是不使用的,无意义的。但你调试的时候,调试器并不知道这个结构体指针是一个句柄,仅把它当做一个普通的结构体,所以会尝试显示unused成员,至于显示???是因为句柄(指针)是一个非法指针,比如0x00008000,调试器是不会读取任何非法指针指向的内存数据的,仅显示???。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧