句柄(标识符)

句柄标识符

句柄(Handle)是一个是用来标识对象或者项目的标识符,可以用来描述窗体、文件等,值得注意的是句柄不能是常量。句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。从定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。

中文名

句柄

外文名

Handle

定 义

标识对象或者项目的标识符

领 域

数理科学

由 来

源于内存管理机制—虚拟地址

本 质

一种标识符

简介

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

在C++中,要访问一个对象,通常可以建立一个指向对象的指针。但是在很多具体的应用中,直接用指针代表对象并不是一个好的解决方案。云存储是目前的一种新的存储模式,它不是一个传统的硬件存储设备(如磁盘、光盘等),而是一种由专门的云存储服务供应商提供的服务,任何用户只需支付一定的费用,都可以使用这种存储服务。用户和程序可以像访问本地文件系统一样,透明的访问存储在远端系统上的文件。[1]

编辑

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

数据类型

从数据类型上来看,它只是一个16位的无符号整数。应用程序总是通过调用WindowsAPI获得一个句柄,之后其他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函数的话,依然需要对句柄进行直接操作。

参考资料

1.基于NFS的云存储网关的研究·中国知网

标签: 句柄