什么是句柄,解释一下好吗?

adron 2001-07-03 09:56:02
...全文
188 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovelypengpeng 2001-07-03
  • 打赏
  • 举报
回复
在某些情况下就是指针
FMD 2001-07-03
  • 打赏
  • 举报
回复
此类问题,应先搜索一下CSDN,看看以前的解答

再贴一次:

句柄是用来访问Windows内部对象的 (也不全是)
可以将这些对象想象成结构体的数组 或 链表,
如后,怎样让用户用呢?

可以将地址(指针)告诉你, 也 可以 将 索引告诉你 ,
但Windows不想 公开这些"内部资料"
所以 它 会吧 指针或 索引 伪装成 句柄(32位值)
在伪装的过程中,MS可能会耍些花招,比如将地址按位取反等等,有些内部句柄只有MS自己知道怎样还原成地址或索引。

用户只使用句柄就行了,例如你调用一个以句柄为参数的函数,系统就会将句柄反运算,得到结构体地址,由其中信息进行操作,然后你就看到函数的结果了。

以窗口句柄为例
系统为了管理窗口,会记录下窗口的很多属性,这些属性可理解 为class 或 struct 对象
然后多个窗口的 结构 构成 了数组 或链表

用户要用到窗口,但MS不想让冒失鬼乱该乱看数据。所以他只将 每个结构的 指针 或 索引给你,指针太危险,为了避免由指针访问,MS可能会作手脚

然后用户只能使用系统返回的这个句柄 hwnd
调用 MoveWindow(hwnd ,0, 0,100,100)
系统由hwnd内部运算找到 对应的数据结构。然后根据读取及更改这些数据,使得重绘制时,位置变化。

采用此种方法,只需要知道一个对象句柄,可调用针对对象的整套操作,也就是 "控制了这个对象"
GolemZ 2001-07-03
  • 打赏
  • 举报
回复
COLORREF只是一个颜色值!一个24为的数(也可能是32位)。
GolemZ 2001-07-03
  • 打赏
  • 举报
回复
可能还有一个原因,就是指针可以直接对内存操作,用句柄却不行,
对句柄的操作都要交由API来完成,就等于控制权都在windows手里,
对系统安全有好处。
adron 2001-07-03
  • 打赏
  • 举报
回复
如果有:HBITMAP a;//定义了一个位图句柄
又:COLORREF b;//定义了一个位图数据地址
这两者如何联系?
wolfman 2001-07-03
  • 打赏
  • 举报
回复
GolemZ(机器人) 说的和我的看法差不多:

Windows把所有的需要管理的对象(包括资源)建立一张映射表,HANDLE vs POINTER , 对与一个对象在建立的时候就自动生成一个HANDLE(或许最初的值就是它的POINTER),在内存管理时就去维护这张表。其实,指针的用途很弱,我以为只是编程的方便;因为你所得到的POINTER也是个假的,是虚拟的,并不是真正的对象地址,这和DOS下单任务不同。
GolemZ 2001-07-03
  • 打赏
  • 举报
回复
我的猜想:windows会定期整理内存,所以指针不固定,
所以就弄了个句柄来代替指针的功能。实际作用和指针
差不多。
plato 2001-07-03
  • 打赏
  • 举报
回复
得到地址干什么?另外HANDLE不一定是代表地址,比如线程的HANDLE,比如窗口的HANDLE,比如HDC等都不是地址。
adron 2001-07-03
  • 打赏
  • 举报
回复
那么针对各种不同的对象资源,怎么得到他们的地址呢?我记得好象有GetSafeHandle这种函数.
eagles521 2001-07-03
  • 打赏
  • 举报
回复
PLATO说得对啊!
句柄是一个数(通常为32位),他代表一个对象。Windows中的句柄内似于传统的C或MS-DOS程序设计中使用的文件句柄。程序几乎总是通过调用WINDWOS函数获取句柄。程序在其他Window函数中使用这个句柄,以引用他代表的对象。句柄的实际值对程序来说无关紧要的。但是,向您的程序中提供句柄的Windows模块知道如何使用它来引用相应的对象。
caiyi9000 2001-07-03
  • 打赏
  • 举报
回复
句柄是指向对象资源的地址,指针是指向普通变量的地址
tbmac 2001-07-03
  • 打赏
  • 举报
回复
一个通过他你可以使用窗口、文件、...的东西
plato 2001-07-03
  • 打赏
  • 举报
回复
句炳是操作系统对于管理的一个对象的标识,在windows中是一个32位整数。
Win32 API中大多数对于系统对象(比如窗口,进程,DC等)操作都要句炳作为参数来表示对象。
z_sky 2001-07-03
  • 打赏
  • 举报
回复
指针
adron 2001-07-03
  • 打赏
  • 举报
回复
不好意思,突然我忘了怎么给分了。
哈哈。
谢谢了,各位!真的分是少了。
adron 2001-07-03
  • 打赏
  • 举报
回复
,
milson 2001-07-03
  • 打赏
  • 举报
回复
句饼全局唯一,他只是操作系统用来表示对象的一个标示而已。和对象本身真正的地址建立了一对一的联系。我是这样认为的。
GolemZ 2001-07-03
  • 打赏
  • 举报
回复
分不多也要给啊!
adron 2001-07-03
  • 打赏
  • 举报
回复
。。。
adron 2001-07-03
  • 打赏
  • 举报
回复
。。
加载更多回复(1)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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