句柄(handle),有两种解释:名列前茅种解释,句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统所管理的内存块或对象时,就要使用句柄。第二种解释,整个Windows编程的基础。句柄是Windows用来标识被应用程序所建立或使用的对象的少数整数。
一、句柄是什么
句柄(handle),有两种解释:
名列前茅种解释:句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统所管理的内存块或对象时,就要使用句柄。
第二种解释:整个Windows编程的基础。句柄是Windows用来标识被应用程序所建立或使用的对象的少数整数。
二、为什么需要句柄
由于虚拟内存的存在,很多进程的代码和数据并未全部载入内存,进程的某一段在载入内存后,也可能被换出到外存,再次载入这段时其所在的内存地址也会发生变化,也就是说,进程的内存地址是会发生改变的,那程序如何准确定位到对象的内存呢,这时就需要句柄了。
系统为每个进程在内存中分配一定的区域,用来存放各个句柄。每个句柄为一个指针,指向内存中的另一个区域(我们不妨称之为区域A)。而区域A中存放的正是对象在内存中的地址。当对象在内存中的位置发生变化时,区域A的值被更新,变为当前时刻对象在内存中的地址,而在这个过程中,区域A的位置以及对应句柄的值是不发生变化的。
三、句柄在Windows中的使用
句柄在 Windows编程中是一个很重要的概念,在 Windows程序中并不是用物理地址来标识一个内存块、文件、任务或动态装入模块的。相反地,Windows API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作 。
应该明白的是,句柄是一个标识符,是用来标识对象或者项目的。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个Windows函数来获得一个句柄,之后其他的Windows函数就可以使用该句柄,以引用相应的对象。
四、使用函数句柄有什么好处
1、提高运行速度
因为matlab对函数的调用每次都是要搜索所有的路径,从set path中我们可以看到,路径是非常的多的,所以如果一个函数在你的程序中需要经常用到的话,使用函数句柄,对你的速度会有提高的。
2、使用可以与变量一样方便
比如说,我再这个目录运行后,创建了本目录的一个函数句柄,当我转到其他的目录下的时候,创建的函数句柄还是可以直接调用的,而不需要把那个函数文件拷贝过来。因为你创建的function handles中,已经包含了路径。
五、常用句柄类型:
HWND 窗口句柄HINSTANCE 当前实列句柄HCURSOR 光标句柄HFONT 字体句柄HPEN 画笔句柄HBRUSH 画刷句柄HDC 设备环境句柄HBITMAP 位图句柄HICON 图标句柄HMENU 菜单句柄HFILE 文件句柄Worktile50万+团队都在用的项目协作工具一个工具满足团队所需:任务、项目、文档、IM、目标、 日历、
甘特图、工时、审批以及更多,让工作更简单