什么是句柄

楼主sqzth(恒恒)2002-03-18 14:05:44 在 VC/MFC / 基础类 提问

本人是个   爱好者。还没有入门,请高手指教什么是   句柄 问题点数:20、回复次数:35Top

1 楼Cline(营营[无意苦争春,贯看群芳谢])回复于 2002-03-18 14:11:51 得分 0

句柄就一个32位的二进制数  
  句柄就一个对象的标识  
   
  句柄就像身份证,用标识茫茫人海的你我他(她)  
  句柄就像一个数组的索引(Index)Top

2 楼nanjianhui(nan)回复于 2002-03-18 14:13:20 得分 0

说实话,它的真正的原型就是一个空指针。Top

3 楼wxcwwx(wwxmmx)回复于 2002-03-18 14:13:55 得分 0

比方说窗口句柄就是指向窗口的指针。Top

4 楼farwind(远风)回复于 2002-03-18 14:47:29 得分 0

句柄是一个指向指针的“指针”  
  即指针的指针Top

5 楼pfans(pfans)回复于 2002-03-18 14:48:49 得分 0

read   bookTop

6 楼guopo(某年某月)回复于 2002-03-18 15:00:19 得分 0

指针是指向地址的,而句柄呢不是,他只是WINDOWS给对象起个名字罢了,  
  Cline说得对!Top

7 楼nanjianhui(nan)回复于 2002-03-18 15:29:47 得分 0

它的本质就是一个空指针Top

8 楼dream_pzy(小狐狸)回复于 2002-03-18 15:30:25 得分 0

Cline说的很具体!Top

9 楼zf925(天下哪来那么多高手)回复于 2002-03-18 15:31:45 得分 0

强烈建议那些不确定自己对不对的人不要胡说八道!!!!!!!  
  强烈建议那些不确定自己对不对的人不要胡说八道!!!!!!!  
  强烈建议那些不确定自己对不对的人不要胡说八道!!!!!!!  
  强烈建议那些不确定自己对不对的人不要胡说八道!!!!!!!  
   
  句柄只是资源的号码,什么指针,他记录的是地址吗?Top

10 楼tuying2(方法)回复于 2002-03-18 15:50:28 得分 0

句柄只是资源的号码?  
  那道就象控件ID一样吗?Top

11 楼nanjianhui(nan)回复于 2002-03-18 15:55:26 得分 0

笨蛋,你看没看过前一段时间微软网站上面的文章,句柄的本质就是一个指针。Top

12 楼microbooby(海岸线)回复于 2002-03-18 16:04:46 得分 0

打个比方,电视机遥控器就是电视机的句柄;  
  再比方,您可能是你老婆的句柄,要么就是话柄,哈哈!  
  (并非完全笑话)Top

13 楼nanjianhui(nan)回复于 2002-03-18 16:12:35 得分 0

我最佩服的就是向你们这样的人,自己都不知道错了,还在这里胡说八道。Top

14 楼tcxzy(清幽别院客)回复于 2002-03-18 16:19:43 得分 0

一个句柄是指windows使用的一个唯一的整数值,是一个4字节长的数值,用于  
  标识应用程序中不同的对象和同类对象中不同的实例。Top

15 楼nanjianhui(nan)回复于 2002-03-18 16:25:02 得分 0

居然有这么多人都不知道,句柄就是一个指针,真实太让我失望了。高手都哪里去了,我都快说烦了!!!Top

16 楼maoqingfeng(千里孤坟)回复于 2002-03-18 16:35:28 得分 0

所谓句柄就是指你说的一句话给人抓住了把柄,简称句柄Top

17 楼colorknight(多彩的骑士)回复于 2002-03-18 16:46:10 得分 0

句柄是32位的,WIN2000中句柄是一个索引(其他系统应该也差不多),它只用了低24位。当进程引用句柄时,在进程引用资源中查找该句柄,并得到与该句柄对应的对象地址进行访问,当然是核心态的。  
  另外,有些朋友说到句柄就是指针,没有具体见过这种事情。但以上所说的确是从资料中看到的。  
   
  Top

18 楼nanjianhui(nan)回复于 2002-03-18 16:56:07 得分 0

你们真的应该去好好看一看,你们看到的一些述说的也没有错。但是你们应该看一看句柄的定义。如果你看了句柄得定义,你就会知道,它的本质就是一个指针。Top

19 楼tuying2(方法)回复于 2002-03-18 17:17:31 得分 0

强烈倡议在中开展有理有据的争论,有利于提高水平,但请注意文明用语。Top

20 楼air2079(虎虎11)回复于 2002-03-18 17:36:55 得分 0

句柄其实就是指针,相当于ID号,如:文件句柄就是唯一定义一个打开文件的整数值Top

21 楼xiaotao0432(白开水)回复于 2002-03-18 18:42:47 得分 0

确定一个对象的唯一标志。Top

22 楼digdog(大狗)回复于 2002-03-18 18:47:57 得分 0

句柄是指针的话,那它同直接取窗中类的地址有什么不同,而这两个是不同的,Top

23 楼honey(小虾米)回复于 2002-03-18 19:25:03 得分 0

就是一个标识!Top

24 楼guopo(某年某月)回复于 2002-03-18 20:35:21 得分 0

你要是追溯到根源当然可以说他最后使用了指针的形式找到了内存的地址,从而确定对象,但是句柄就是句柄,指针即指针,两者是不一样的.Top

25 楼FlyCom_NT(抽刀断水彩笔描空)回复于 2002-03-18 20:47:43 得分 0

打个比方说,句柄就像门牌号,内存就像一栋楼Top

26 楼Cline(营营[无意苦争春,贯看群芳谢])回复于 2002-03-18 20:54:23 得分 0

在侯捷翻译的<Windows95大奥秘>上好象是说过,句柄就是一块内存的地址或偏移量。Top

27 楼aspiregao()回复于 2002-03-18 21:18:56 得分 0

句柄用来引用不同的windows对象。你可以对窗口、文件使用句柄,也能对分配了的内存、图象使用句柄。可以把句柄理解为与指针类似。你必须通过某种方式来创建句柄;而且在使用完后销毁掉,不然将造成资源泄漏而使你的系统瘫痪。所以要保证它们在某个时候被销毁了。  
  当你调用某个API函数时,你传入的句柄在函数内部会先进行句柄合法性的检查,合法的句柄才能访问系统资源,非法的句柄将不能执行函数代码,从而保证了系统的可靠运行。Top

28 楼aspiregao()回复于 2002-03-18 21:22:17 得分 0

再说一点,实际上句柄也就是指向某个系统资源结构的指针,这个指针会在使用前进行类型转化,将它转化为某个系统资源的结构,如转化成功,则执行函数,否则退出函数Top

29 楼myctx(Neo)回复于 2002-03-18 21:48:21 得分 0

句柄是指针的指针Top

30 楼skykufo(宇宙探索者号)回复于 2002-03-18 21:52:17 得分 0

一个进程在核心态都有一个表,记录着进程拥有的对象的指针,那些对象  
  由系统的对象管理器管理,是个有相同对象头,不同对象体的结构(把它  
  们说成结构不很精确),系统对象是可共享的资源(除非被设为独占),各个  
  进程的对象表的不同项可指向同一对象,句柄就是表的索引(一个项4bytes  
  据说2000表是个多重树).  
  所以说句柄是个真实指针是不准确的,不信你直接给另一进程传个句柄,看  
  看能否也用同个对象。Top

31 楼sqzth(恒恒)回复于 2002-03-24 21:21:55 得分 0

谢谢大家的支持    
  如果那位愿意共同进步的话      
  E-mail:sqzth@163.com  
  QQ19406146  
  注:本人是一个入门级人物  
   
  Top

32 楼cnshinhwa(月夜森林)回复于 2002-03-24 21:52:40 得分 0

to:   maoqingfeng(千里孤坟)    
  有意思Top

33 楼zf925(天下哪来那么多高手)回复于 2002-03-24 22:14:28 得分 0

To:nanjianhui(nan)  
  别只骂别人笨蛋,你要不笨就帖出文章!  
  据我所知,就是资源ID,或许你比我厉害的多,但你贴出能说明问题的文章来,我们都服,否则,嘿嘿,只能说明你的......  
   
   
   
  另外,我还请问:  
  bios下的几号中断调用,系统乘4就能算出中断地址,那它也该是指针了??Top

34 楼bluecrest(高歌)回复于 2002-03-24 22:21:32 得分 0

内存中一张表的索引就是句柄,其中有一项是指针,所以你可以把它看作指针  
  但不完全一样,他还包括其他信息  
  Top

35 楼florist2000(我爱susan)回复于 2002-03-24 23:41:14 得分 20

都这么多天了还吵  
  我再次在这里发言,是想彻底消除这里一些入门程序员心中的疑惑  
  (如果大家认为是正确的,那么就不要跟贴,如果觉得是错误的  
  请指明)  
   
  我得观点是:  
  句柄和指针根本就不是一回事,基本上没有共同的地方  
  我对句柄的定义是:  
  句柄是系统内部受保护的数据结构的标志或者说索引  
   
  我的解释:  
  当你的应用程序或者系统建立内核对象,用户对象,GUI对象的时候  
  实际上这些对象是一些内存数据结构(这个就不要我解释了吧)  
  显然这些对象需要受到保护,不能让用户随便修改访问,否则系统很容易崩溃  
  所以提供了一个机制来保护性的访问这些对象,那就是API  
  句柄是这些对象的标记,或者说是索引  
  在内存中往往会存在一张句柄表,一般至少有如下结构  
   
  索引(也就是句柄)     指针(指向内存对象数据结构)   其他项  
  1                                       ox????????  
  2                                       ox????????  
  3                                       ox????????  
  4...  
   
  系统采用API,查询句柄表,取得句柄所对应的指针  
  这个指针才是真正的指针,用它可以访问修改受保护的内存。  
   
  假如句柄是指针  
  1   你自己输出一些句柄的值来看,句柄一般都是一些很小的整数值,  
      比如1,2,3,4。。。。。。  
      如果是指针的话,它起不是指向受保护的区域?岂不是NULL指针???  
   
  2   句柄如果是指针的话,那么用户岂不可以直接访问内存对象了?  
      那系统还有什么稳定性,安全性?  
   
  3   你把得到的句柄,比如hwnd做hwnd++,hwnd--等运算,你看错不错。  
  。。。。。。  
  其他理由我都不想说了  
  如果有人说看到句柄的定义为指针(我没有看到过)  
  那你就去当指针吧,反正指针也是32位的值,和无符号整数没有任何区别。  
   
   
  如果是入门程序员,希望看看我说得  
  如果你是牛B人,还是保留你的意见算了,唉。  
   
  Top

你可能对以下的问题也比较感兴趣....