什么是句柄啊?

楼主gyyggyy(方西瓜)2001-12-20 12:21:23 在 扩充话题 / 程序人生 提问

问题点数:29、回复次数:9Top

1 楼tccb()回复于 2001-12-20 13:13:06 得分 0

当你program时,申请了系统的某些资源,如file,window等等,系统返回这个资源的ID号,即句柄。以后,你可以使用句柄操作系统资源.Top

2 楼glboy(星毅)回复于 2001-12-20 13:26:22 得分 29

好久没来了,呵呵。  
   
  handle是一个32位的整数,一般由操作系统管理,唯一标识对象。得到窗口句柄就能够  
  对窗口进行操作。  
  受M$的帮助文档以及很多Windows编程书籍的影响,大家对局柄比较普遍的认识是:句柄是一个整数,用以标识Windows对象,句柄不是一个指针……  
   
  而实际上,这些不过是M$进行数据封装的幌子而已,下面我们一起来分析一下HANDLE到底是什么。  
   
  请先到Windef.h找绝大多数句柄的定义:  
  DECLARE_HANDLE(HWND);  
  DECLARE_HANDLE(HHOOK);  
  ……  
  DECLARE_HANDLE(HGDIOBJ);  
  DECLARE_HANDLE(HBITMAP);  
  DECLARE_HANDLE(HBRUSH);  
  ……  
  typedef   HANDLE                             HGLOBAL;  
  typedef   HANDLE                             HLOCAL;  
  ……  
   
  OK,   现在大家跟我一起翻到Winnt.h,看看DECLARE_HANDLE和HANDLE到底是什么:  
  #ifdef   STRICT  
  typedef   void   *HANDLE;  
  #define   DECLARE_HANDLE(name)   struct   name##__   {   int   unused;   };   typedef   struct   name##__   *name  
  #else  
  typedef   PVOID   HANDLE;  
  #define   DECLARE_HANDLE(name)   typedef   HANDLE   name  
  #endif  
  typedef   HANDLE   *PHANDLE;  
   
  哈哈,现在知道了吧,HANDLE就是PVOID,也就是无类型指针,  
  而DECLARE_HANDLE(HWND);就是:  
  struct   HWND__   {  
          int   unused;};  
  typedef   struct   HWND__   *HWND;  
  现在实际上都清楚啦,这些Handles都不过是指向struct的指针,至于这个struct的用处,连M$都说unused了,^o^  
   
  现在解释下M$这么做的意义,这就是所谓数据封装,你可以在你的程序中把M$的内部结构指针传来传去,可是你却不知道它到底指向的内容是什么,而且可以编个句柄的瞎话防止大家的质疑:)。而M$的程序大可以这么写:  
  #include   <windows.h>     //这个和大家用的一样  
  #include   "windows_in.h"     //这个是M$自用的,外人别想看到^o^  
   
  HSOMETHINGELSE   DoSomething(HSOMETHING   hSomething)   {  
          struct   RealSomething*   p   =   (struct   RealSomething*)hSomething;   //先强制类型转换成内部结构指针  
          ……do   something……  
          return   (HSOMETHINGELSE)pRealSomethingElse;//强制类型逆转换  
  }  
  Top

3 楼yinx(新星知我心)回复于 2001-12-20 13:27:41 得分 0

windows管理系统资源使用的东东,看看windows   api就知道了Top

4 楼sandj(不了)回复于 2001-12-20 13:29:27 得分 0

同意!  
  实际上就是一个代号了。  
   
  英文中应该是HANDLE,  
  我在申请域名的时候就给了一个HANDLE,说以后我会需要这个HANDLE,  
  当时还迷糊干吗给我一个“把手”,后来慢慢明白,就类似于一个“USERNAME”  
  在数据库中有一堆资料和这个HANDLE相对应。  
  而我在以后使用的时候就可以简单的只提供这个   HANDLE   就可以了。Top

5 楼scsi(技术蚯蚓)回复于 2001-12-20 17:18:14 得分 0

所谓句柄,  
  就是跟你的那一根柄差不多,  
  只要你抓住了这一根柄,  
  你就可以想做你自己想做的事情了.  
  就这么简单.  
  do   u   understand?Top

6 楼xiaodaoren(*)回复于 2001-12-21 11:35:32 得分 0

对!glboy(星毅)说的全! Top

7 楼profwy(profwy)回复于 2001-12-21 12:11:26 得分 0

见识了Top

8 楼gyyggyy(方西瓜)回复于 2001-12-21 17:09:10 得分 0

我怎么给你们分数啊?Top

9 楼gyyggyy(方西瓜)回复于 2001-12-21 17:11:20 得分 0

我怎么给你们分数啊?Top

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