句柄无效啥意思 句柄

什么是句柄句柄就是个数字,一般和当前系统下的整数的位数一样,比如32bit系统下就是4个字节 。
这个数字是一个对象的唯一标示,和对象一一对应 。
这个对象可以是一个块内存,一个资源,或者一个服务的context(如 socket,thread)等等 。
这个数字的来源可以有很多中,只要能保证和它代表的对象保持唯一对应就可以,比如可以用内存地址,也可以用句柄表的序号,或者干脆用一个自增ID,再或者用以上的值去异或一个常数 。
扩展资料:
windows 之所以要设立句柄,根本上源于内存管理机制的问题—虚拟地址,简而言之数据的地址需要变动,变动以后就需要有人来记录管理变动,(就好像户籍管理一样),因此系统用句柄来记载数据地址的变更 。
传统上操作系统内核和系统服务API都是 C 语言接口的,但是其内部设计理念上又是OO的,所以有对象概念却没有对应的语言语法支持 。
句柄的作用就是在 C 语言环境下代替 C++ 的对象指针来用的,创建句柄就是构造,销毁句柄就是析构,用句柄调用函数相当于传入this指针 。
如果有系统API是 C++ 接口的,那么就没有句柄了,而是某个接口指针,IXXXPtr之类的,比如Windows的com ptr 。
参考资料来源:百度百科-句柄
句柄是什么昨天回答过了 。
句柄是从英文翻译过来的词,原文叫handle,操纵杆的意思 。翻译成句柄,很令人费解 。
从计算机软件核心来看,句柄是一个无符号整型数,它相当于一个指针地址,指向一个“资源块”,例如 HWND 型的 句柄,不同的句柄 指向 不同的 窗体资源块 。
从我们写程序来看,可以把它看成 窗 的 ID ( 标识),例如:HWND hwd1,hwd2;
hwd1 就是 1号窗,hwd2就是 2号窗 。
对 hwd1 的操作,就是对 1号窗 做操作 。
对 hwd2 的操作,就是对 2号窗 做操作 。
c/c++ 有多种多样的 句柄 。我们把他们看成 ID 或 一样东西的别名,一个对象(object) 的别名 。

句柄无效啥意思 句柄

文章插图
什么是句柄?句柄有什么作用?所谓句柄实际上是一个数据,是一个Long
(整长型)的数据 。
句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等 。WINDOWS句柄有点象C语言中的文件句柄 。
从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人 。从数据类型上来看它只是一个16位的无符号整数 。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象 。
如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针 。我们知道,所谓指针是一种内存地址 。应用程序启动后,组成这个程序的各对象是住留在内存的 。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象 。但是,如果您真的这样认为,那么您就大错特错了 。我们知道,Windows是一个以虚拟内存为基础的操作系统 。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要 。对象被移动意味着它的地址变化了 。如果地址总是如此变化,我们该到哪里去找该对象呢?
为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的 。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存 。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置 。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统 。
句柄地址(稳定)→记载着对象在内存中的地址————→对象在内存中的地址(不稳定)→实际对象
本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS
API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作 。
但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的 。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理 。

秒懂生活扩展阅读