句柄

更新时间:2023-12-27 17:50

句柄(Handle)是一个用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量。

简介

句柄(handle)是C++程序设计中经常提及的一个术语。它并不是一种具体的、固定不变的数据类型或实体,而是代表了程序设计中的一个广义的概念。句柄一般是指获取另一个对象的方法——一个广义的指针,它的具体形式可能是一个整数、一个对象或就是一个真实的指针,而它的目的就是建立起与被访问对象之间的唯一的联系。

在C++中,要访问一个对象,通常可以建立一个指向对象的指针。但是在很多具体的应用中,直接用指针代表对象并不是一个好的解决方案。

对象

句柄是Windows系统中对象或实例的标识,这些对象包括模块、应用程序实例、窗口、控件、位图、GDI对象、资源、文件等。

数据类型

数据类型上来看,它只是一个16位的无符号整数。应用程序总是通过调用Windows API获得一个句柄,之后其他 Windows函数就可以使用该句柄,以引用和操作相应的内核对象。句柄可以像指针那样置空,那样句柄就没有任何意义,不代表任何内核对象。

使用

句柄在 Windows编程中是一个很重要的概念,在 Windows程序中并不是用物理地址来标识一个内存块、文件、任务或动态装入模块的。相反地,Windows API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。

应该明白的是,句柄是一个标识符,是用来标识对象或者项目的。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个Windows函数来获得一个句柄,之后其他的Windows函数就可以使用该句柄,以引用相应的对象。在 Windows编程中会用到大量的句柄。

好处

句柄可以给我们带来如下的好处:

1、我们可以在实现中用尺寸大小固定的(constant-sized)对象来表示尺寸大小不定的(variable-sized)值。

2、我们可以在实现中用运行时绑定(run-time bounding)而不是编译时(compile-timebounding)绑定的方式来处理对象。

3、对于实现的改变通常只会引起一次重新链接,而不是重新编译。

4、我们可以对他人隐藏对象的实现。

发展

在早期的Windows应用程序中,句柄的使用是很频繁的。但随着MFC类库发展,其对Windows内核的封装程度不断提高。这样如果用MFC类库编程的话,就很少会有机会直接对句柄进行操作。但是如果使用 Windows API函数的话,依然需要对句柄进行直接操作

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}