什么是句柄

sqzth 2002-03-18 02:05:44
本人是个 爱好者。还没有入门,请高手指教什么是 句柄
...全文
187 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
florist2000 2002-03-24
  • 打赏
  • 举报
回复
都这么多天了还吵
我再次在这里发言,是想彻底消除这里一些入门程序员心中的疑惑
(如果大家认为是正确的,那么就不要跟贴,如果觉得是错误的
请指明)

我得观点是:
句柄和指针根本就不是一回事,基本上没有共同的地方
我对句柄的定义是:
句柄是系统内部受保护的数据结构的标志或者说索引

我的解释:
当你的应用程序或者系统建立内核对象,用户对象,GUI对象的时候
实际上这些对象是一些内存数据结构(这个就不要我解释了吧)
显然这些对象需要受到保护,不能让用户随便修改访问,否则系统很容易崩溃
所以提供了一个机制来保护性的访问这些对象,那就是API
句柄是这些对象的标记,或者说是索引
在内存中往往会存在一张句柄表,一般至少有如下结构

索引(也就是句柄) 指针(指向内存对象数据结构) 其他项
1 ox????????
2 ox????????
3 ox????????
4...

系统采用API,查询句柄表,取得句柄所对应的指针
这个指针才是真正的指针,用它可以访问修改受保护的内存。

假如句柄是指针
1 你自己输出一些句柄的值来看,句柄一般都是一些很小的整数值,
比如1,2,3,4。。。。。。
如果是指针的话,它起不是指向受保护的区域?岂不是NULL指针???

2 句柄如果是指针的话,那么用户岂不可以直接访问内存对象了?
那系统还有什么稳定性,安全性?

3 你把得到的句柄,比如hwnd做hwnd++,hwnd--等运算,你看错不错。
。。。。。。
其他理由我都不想说了
如果有人说看到句柄的定义为指针(我没有看到过)
那你就去当指针吧,反正指针也是32位的值,和无符号整数没有任何区别。


如果是入门程序员,希望看看我说得
如果你是牛B人,还是保留你的意见算了,唉。

bluecrest 2002-03-24
  • 打赏
  • 举报
回复
内存中一张表的索引就是句柄,其中有一项是指针,所以你可以把它看作指针
但不完全一样,他还包括其他信息
zf925 2002-03-24
  • 打赏
  • 举报
回复
To:nanjianhui(nan)
别只骂别人笨蛋,你要不笨就帖出文章!
据我所知,就是资源ID,或许你比我厉害的多,但你贴出能说明问题的文章来,我们都服,否则,嘿嘿,只能说明你的......



另外,我还请问:
bios下的几号中断调用,系统乘4就能算出中断地址,那它也该是指针了??
Kevin_C_K 2002-03-24
  • 打赏
  • 举报
回复
to: maoqingfeng(千里孤坟)
有意思
sqzth 2002-03-24
  • 打赏
  • 举报
回复
谢谢大家的支持
如果那位愿意共同进步的话
E-mail:sqzth@163.com
QQ19406146
注:本人是一个入门级人物

skykufo 2002-03-18
  • 打赏
  • 举报
回复
一个进程在核心态都有一个表,记录着进程拥有的对象的指针,那些对象
由系统的对象管理器管理,是个有相同对象头,不同对象体的结构(把它
们说成结构不很精确),系统对象是可共享的资源(除非被设为独占),各个
进程的对象表的不同项可指向同一对象,句柄就是表的索引(一个项4bytes
据说2000表是个多重树).
所以说句柄是个真实指针是不准确的,不信你直接给另一进程传个句柄,看
看能否也用同个对象。
myctx 2002-03-18
  • 打赏
  • 举报
回复
句柄是指针的指针
aspiregao 2002-03-18
  • 打赏
  • 举报
回复
再说一点,实际上句柄也就是指向某个系统资源结构的指针,这个指针会在使用前进行类型转化,将它转化为某个系统资源的结构,如转化成功,则执行函数,否则退出函数
aspiregao 2002-03-18
  • 打赏
  • 举报
回复
句柄用来引用不同的windows对象。你可以对窗口、文件使用句柄,也能对分配了的内存、图象使用句柄。可以把句柄理解为与指针类似。你必须通过某种方式来创建句柄;而且在使用完后销毁掉,不然将造成资源泄漏而使你的系统瘫痪。所以要保证它们在某个时候被销毁了。
当你调用某个API函数时,你传入的句柄在函数内部会先进行句柄合法性的检查,合法的句柄才能访问系统资源,非法的句柄将不能执行函数代码,从而保证了系统的可靠运行。
Cline 2002-03-18
  • 打赏
  • 举报
回复
在侯捷翻译的<Windows95大奥秘>上好象是说过,句柄就是一块内存的地址或偏移量。
FlyCom_NT 2002-03-18
  • 打赏
  • 举报
回复
打个比方说,句柄就像门牌号,内存就像一栋楼
guopo 2002-03-18
  • 打赏
  • 举报
回复
你要是追溯到根源当然可以说他最后使用了指针的形式找到了内存的地址,从而确定对象,但是句柄就是句柄,指针即指针,两者是不一样的.
honey 2002-03-18
  • 打赏
  • 举报
回复
就是一个标识!
digdog 2002-03-18
  • 打赏
  • 举报
回复
句柄是指针的话,那它同直接取窗中类的地址有什么不同,而这两个是不同的,
xiaotao0432 2002-03-18
  • 打赏
  • 举报
回复
确定一个对象的唯一标志。
air2079 2002-03-18
  • 打赏
  • 举报
回复
句柄其实就是指针,相当于ID号,如:文件句柄就是唯一定义一个打开文件的整数值
tuying2 2002-03-18
  • 打赏
  • 举报
回复
强烈倡议在CSDN中开展有理有据的争论,有利于提高水平,但请注意文明用语。
  • 打赏
  • 举报
回复
你们真的应该去好好看一看,你们看到的一些述说的也没有错。但是你们应该看一看句柄的定义。如果你看了句柄得定义,你就会知道,它的本质就是一个指针。
colorknight 2002-03-18
  • 打赏
  • 举报
回复
句柄是32位的,WIN2000中句柄是一个索引(其他系统应该也差不多),它只用了低24位。当进程引用句柄时,在进程引用资源中查找该句柄,并得到与该句柄对应的对象地址进行访问,当然是核心态的。
另外,有些朋友说到句柄就是指针,没有具体见过这种事情。但以上所说的确是从资料中看到的。

maoqingfeng 2002-03-18
  • 打赏
  • 举报
回复
所谓句柄就是指你说的一句话给人抓住了把柄,简称句柄
加载更多回复(15)

16,551

社区成员

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

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

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