Windows编程学习之句柄
1 介绍:
句柄,是整个Windows编程的基础,一个句柄是指使用一个唯一的整数值(32位OS中四字节长/64位OS中8字节长),来标识应用程序中不同对象和同类中的不同实例。应用程序能通过句柄访问相应对象的信息。
1.1 定义:句柄是OS内标志程序建立的唯一整数
1.2 由来:源于内存管理机制-虚拟地址
1.3 重要性:是整个Windows编程的基础
1.4 与指针的区别:
特别强调,句柄不是指针,句柄只是对象的一个唯一标识。程序不能利用句柄来直接阅读文件中的信息,如果句柄不在I/O文件中,那么它的存在也没有了意义。
而指针则是直接指向对象的内存地址,程序可以通过指针直接访问对象。所以在学习中千万不要混淆两者。
2 由来
Windows 之所以要设立句柄,根本上源于内存管理机制的问题—虚拟地址,因为在程序运行时,数据的地址需要时常的变动,变动以后就需要重新记录,因此系统用句 柄来记载数据地址的变更。
也可以这么理解,句柄就是OS老大为了方便管理和调度自己手上时常变动的资源,而设置的一种管理机制,无论数据怎样动态变动,在它变动后都需将最新的地址上报给句柄,然后让句柄记录,当下次在用到时,只需要问句柄,便能直接找到相应的数据。
3 原理
Windows程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的。相反,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。
句柄是一个标识符,是拿来标识对象或者项目的。它就像我们的车牌号一样,每一辆注册过的车都会有一个确定的号码,不同的车号码各不相同,但是也可能会在不同的时期出现两辆号码相同的车,只不过它们不会同时处于使用之中罢了。从数据类型上来看它只是一个32位(或64位)的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。在WINDOWS编程中会用到大量的句柄,比如:HINSTANCE(实例句柄),HBITMAP(位图句柄),HDC(设备描述句柄),HICON(图标句柄)等等。这当中还有一个通用的句柄,就是HANDLE。