句柄是标识一个窗口的,指针是指向一块内存的,我这么理解对么?那指针和句柄之间能互相赋值么?

解决方案 »

  1.   

    API是接口,句柄是接口,两者有什么区别?API是一个通用的函数族,他处理所有的对象,而句柄是和某个具体对象相关联的数据结构。只有借助句柄,API才知道处理哪个对象。有些对象有ID。句柄表示特殊的对象,ID也表示某个对象,为什么要两个东西来表示?首先,句柄不能唯一表示对象。一个对象可以有多个句柄。例如:假设我们用CreateProcess创建一个进程,该进程的第一个线程的句柄会返回给调用CreateProcess的进程。同时,在新创建的进程中,该线程也会有一个句柄。这样,这个线程就有两个句柄。我们也可以用DuplicateHandle复制一个句柄,这个句柄和原来句柄是不一样的,但是他们都表示同一个对象。而每个有ID的对象,在系统范围内,ID肯定是唯一的。其次,句柄所能实现的功能ID不能实现。毕竟ID只是一个数字,他不能记录很多信息。而句柄可能在其内部结构中记录了很多信息(如权限、有无信号等)。总之,如果试图解释他到底是什么,学习句柄就会误入歧途。从虚的角度去理解,对于新手是难一点,但是这也许是唯一正确的办法。
      

  2.   

    以前的好帖,转你看看句柄与指针
    评论(1)发表时间:2006年2月15日 12时11分  
    [%repeat_0 match="/data/option"%]   [%=@title%]   [%=@count%]票 [[%=@percent%]%]  
    [%_repeat_0%]    
     
    csdn上有人说过:牧童遥指杏花村。
    牧童的手为指针,杏花村的牌子为句柄,杏花村酒店为对象的实例.句柄就是烤叉,用烤炉烤过鸭,鸡,牛,羊,狗么?
    炉子里的东西是看不见,摸不到的,但你能用叉子去控制,
    至于叉子上的是什么,你放进去前应该记住。呵呵句柄有时是指针,有时是索引,但他绝对是一把钥匙,内核句柄110的钥匙,GDI句柄是
    您的钥匙,只对您有效。    单从概念上讲,句柄指一个对象的标识,而指针是一个对象的首地址。从实际处理
    的角度讲,即可以把句柄定义为指针,又可以把它定义为同类对象数组的索引,这两种
    处理方法都有优缺点,至于选用哪种方式,完全应该看实际需要,这可以说是一种程序
    设计上的技巧。那种单纯认为句柄是指针或索引的想法都是机械的、不确切的。
        其实,在Windows中类似的处理是很多的、很灵活的。再具个相似的例子:
        我们知道,在Windows中有个函数叫做CallWindowProc。故名思义,它的作用就是向
    指定的窗口过程传递一个消息。你也许会想,既然我已经有了窗口过程的指针,为什么
    我不可以直接通过这个指针调用该函数(这是C语言的内建功能)?事实上,在Win16中
    确实可以这么做,因为GetWindowLong返回的确实是该函数的指针。但在Win32下,GetW
    indowLong返回的并不是该函数的指针,而是一个包含函数指针的数据结构的指针(MSD
    N上说返回的是一个窗口函数地址或它的句柄,就是指的这种情况)。该数据结构是可变
    的,但只要你使用CallWindowProc来调用的话是不会出错的。这里我们又看到使用句柄
    处理带来的好处。(补充说明一点:微软在这里之所以这么处理,是为了解决16位/32位
    以及ANSI/UNICODE的转化问题)
     
      

  3.   

    句柄的英文意思是handle,直译可译为把手,你可以用句柄来获得对一个对象的使用,窗口句柄只是其中的一个,还有打印机句柄,内存区块句柄.句柄是把各种对象抽象为一个句柄变量,从而可以通过操纵句柄来操纵对象.一般来说句柄实际是指向struct结构的指针.
    我不知道你是不是学习了C语言,但如果你对指针还不是很清楚的话,还是应该先看看C语言的书,不用着急学windows编程
      

  4.   

    往往句柄是对数据指针的一个包装
    然后通过索引表的形式引用到实际数据里面
    可以参考袁峰老大的<windows图形编程><windows核心编程>里面的有关章节
      

  5.   

    句柄的意义其实只是标识对象的ID,一个ID绝对可以用整形变量或指针什么等保存,所以是可以相互赋值的。