windows环境中,句柄是用来标识 项目 的。项目包括
1.模块 module
2.任务 task
3.实例 instance
4.文件 file
5.内存块 block of memory
6.菜单 menu
7.控制 control
8.字体 font
9.资源 resource(包括图标 coin 光标cursor 字符串string等)
10.GDI对象(GDI object)(包括位图bitmap 画刷brush、元文件metafile)、调色板palette、画笔pen、区域region、设备描述表device context
windows是以虚拟内存为基础的操作系统,windows内存管理器在内存中来回移动对象,从而满足各种应用程序的内存需要。对象移动即地址发生变化,所以windows系统为各应用程序腾出一些内存,专门用来登记各应用对象在内存中的地址变化,而这些地址(存储单元的位置)本身是不变的。windows内存管理器在内存中移动对象后,把对象新的地址告知句柄地址来保存。这样只需要记住这个句柄地址就可以间接知道对象在内存中的具体位置。这个地址在对象装载load时由系统分配,当系统unload时又释放给系统。
因此windows程序中并不是用物理地址来标识内存块、文件、任务或动态装入模块的,相反,windows APi给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。
在windows中会用到大量句柄,eg:HINSTANCE 实例句柄 HBITMAP 位图句柄 HDC设备描述表句柄 HICON图标句柄等
还有一个通用句柄 即HANDLE