可能的重复项:
我看到了对窗口句柄的引用,对窗口句柄的引用的控件,等等,但我不知道句柄是什么。
我特别想知道它是什么,以及任何相关的细节,因为它与.NET有关。
发布于 2011-04-11 13:23:15
句柄是操作系统的引用。它不具有编程引用的语义,但它所做的是允许系统资源在API调用中传递它时知道您引用的是什么。
通常,句柄包装在类的实例中。CWnd就是一个很好的例子,它包含一个HWND,它是一个窗口的句柄。
你可以做到这一点。CWnd *pWnd = CWnd::FromHandle(hWnd)注意: CWnd::FromHandle(hWnd)是静态的,不需要实例。
它将把包装hWnd的包装器传回给你。嗯,不完全是!如果句柄实际上没有被对象包装,它将创建一个对象,并且它将只被TEMPORARY.So使用一次,然后丢弃它。它可以创建实例,因为hWnd的结构中有足够的信息供windows实例化CWnd对象。它不会将其添加到句柄v对象表中,因此它只是临时的。
HWND实际上是一个内核对象,还有更多?
如果需要的话,我不确定所有这些函数是否都会回传一个临时对象。GetDC( hWnd )将从hWnd获得一个hDC,但它是临时的,使用CDC类可能更好。
阅读更多:http://wiki.answers.com/Q/What_is_a_handle_in_Windows_Programming#ixzz1JBmoF0lv
发布于 2011-04-11 13:16:39
句柄是对另一方(通常是操作系统)提供给您的某些资源的抽象引用,您可以将其交回给另一方以引用该资源。
OSes通常包含一个句柄表,其中包含用户创建的实体(打开的文件、创建的信号量、进程、线程等);句柄是(通常实现为)该表的整数索引。您的进程执行打开操作,操作系统在其句柄表中创建一个条目,用您的(进程)名称对其进行标记,然后将该条目的索引返回给您的进程。当您的进程想要执行读操作时,它会向OS提供句柄整数,操作系统只需将它用作表索引就可以在表中查找它;它现在知道您的进程想要从哪个实体(文件)中读取。
通过将您的进程id放入句柄条目中,操作系统可以判断该句柄对于该进程是否有效。您的进程可以提供垃圾作为OS的句柄;如果句柄插槽匹配,则OS将执行您想要的操作,而不管它有多愚蠢。毕竟,这是你的资源。
发布于 2011-04-11 13:13:38
句柄是唯一标识操作系统对象的东西,可以是套接字、同步原语等(在Unix中,它们通常被称为描述符)。从技术上讲,它要么是全局对象表中的偏移量,要么是指向包含对象信息的记录的指针。但您需要将此句柄视为一个不透明的数字。
.NET使用对对象的引用,因此在.NET中,当涉及到与操作系统的互操作时,您会遇到句柄。
https://stackoverflow.com/questions/5616988
复制相似问题