什么是"手柄"?

ric*_*ard 21 .net c# definition handle

可能重复:
什么是Windows句柄?
究竟什么是"处理"?

我看到窗口引用句柄,其中有一个窗口的引用控制手柄等,但我不知道句柄是什么.

我特别想知道它是什么,以及与.NET有关的任何相关细节.

kar*_*hik 12

句柄是操作系统的参考.它没有编程引用的语义,但它所做的是允许系统资源知道在API调用中传递时你所指的是什么.

通常,HANDLE包含在类的实例中.CWnd就是一个很好的例子,它包含一个HWND,它是窗口的句柄.

你可以这样做.CWnd*pWnd = CWnd :: FromHandle(hWnd)注意:CWnd :: FromHandle(hWnd)是静态的,不需要实例.

它将传递回hWnd包装的包装器.好吧不太好!如果句柄实际上没有被对象包裹,它将创建一个并且它只能是临时的.所以使用它一次然后扔掉它.它可以创建实例,因为hWnd在其struct的结构中有足够的信息来实例化CWnd对象.它不会将它添加到句柄v对象表中,因此它只是临时的.

HWND实际上是一个内核对象,还有更多?

  • HWND(CWnd和CWnd派生类)
  • HDC(CDC和CDC派生类)
  • HMENU(CMenu)
  • HPEN(CGdiObject)
  • HBRUSH(CGdiObject)
  • HFONT(CGdiObject)
  • HBITMAP(CGdiObject)
  • HPALETTE(CGdiObject)
  • HRGN(CGdiObject)
  • HIMAGELIST(CImageList)
  • SOCKET(CSocket)(应该是HSOCKET?)
  • 和别的.

我不确定如果需要,所有这些都会传回一个临时对象.GetDC(hWnd)将从hWnd获取hDC,但它将是临时的,可能更好地使用CDC类.

阅读更多:http://wiki.answers.com/Q/What_is_a_handle_in_Windows_Programming#ixzz1JBmoF0lv


Ira*_*ter 5

句柄是对另一方(通常是操作系统)提供给您的某些资源的抽象引用,您可以将其移交给引用该资源.

操作系统通常包含一个句柄表,其中包含用户创建的实体(打开文件,......); handle是此表的整数索引.您的进程打开,操作系统在其句柄表中创建一个条目,用您的(进程)名称标记它,并将该条目的索引交还给您的进程.当你的进程想要读取时,它为操作系统提供句柄整数,只需将其用作表索引即可在表中查找; 它现在知道你的进程想要读取哪个实体(文件).

通过将您的进程ID放在句柄条目中,操作系统可以判断句柄是否对进程有效.您的流程可以提供垃圾作为操作系统的句柄; 如果句柄槽匹配,操作系统将执行您想要的操作,无论它多么愚蠢.毕竟,它是你的资源.