首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是“句柄”?

问什么是“句柄”?
EN

Stack Overflow用户
提问于 2011-04-11 13:10:06
回答 3查看 26.6K关注 0票数 22

可能的重复项:

What is a Windows Handle?

What exactly is “handle” ?

我看到了对窗口句柄的引用,对窗口句柄的引用的控件,等等,但我不知道句柄是什么。

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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实际上是一个内核对象,还有更多?

  • HWND (CWnd和CWnd派生类)
  • HDC (CDC和CDC派生类)
  • HMENU (CMenu)
  • HPEN HWND (CSocket) (本应为其他。

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

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

票数 13
EN

Stack Overflow用户

发布于 2011-04-11 13:16:39

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

OSes通常包含一个句柄表,其中包含用户创建的实体(打开的文件、创建的信号量、进程、线程等);句柄是(通常实现为)该表的整数索引。您的进程执行打开操作,操作系统在其句柄表中创建一个条目,用您的(进程)名称对其进行标记,然后将该条目的索引返回给您的进程。当您的进程想要执行读操作时,它会向OS提供句柄整数,操作系统只需将它用作表索引就可以在表中查找它;它现在知道您的进程想要从哪个实体(文件)中读取。

通过将您的进程id放入句柄条目中,操作系统可以判断该句柄对于该进程是否有效。您的进程可以提供垃圾作为OS的句柄;如果句柄插槽匹配,则OS将执行您想要的操作,而不管它有多愚蠢。毕竟,这是你的资源。

票数 10
EN

Stack Overflow用户

发布于 2011-04-11 13:13:38

句柄是唯一标识操作系统对象的东西,可以是套接字、同步原语等(在Unix中,它们通常被称为描述符)。从技术上讲,它要么是全局对象表中的偏移量,要么是指向包含对象信息的记录的指针。但您需要将此句柄视为一个不透明的数字。

.NET使用对对象的引用,因此在.NET中,当涉及到与操作系统的互操作时,您会遇到句柄。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5616988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档