年夜家好,我是小华,我来为年夜家解答以上题目。句柄无效啥意思,句柄良多人还不知道,此刻让我们一路来看看吧!
1、句柄概念在WINDOWS编程中是一个很主要的概念,在很多处所都饰演侧重要的脚色。
2、但由此而发生的句柄概念也年夜同小异,好比:<>(Microsoft Press,by Richard Wilton)一书中句柄的概念是:在Windows情况中,句柄是用来标识项目标,这些项目包罗: *.模块(module) *.使命(task) *.实例(instance) *.文件(file) *.内存块(block of memory) *.菜单(menu) *.节制(control) *.字体(font) *.资本(resource),包罗图标(icon),光标(cursor),字符串(string)等 *.GDI对象(GDI object),包罗位图(bitmap),画刷(brush),元文件(metafile),调色板(palette),画笔(pen),区域(region),和装备描写表(device context)。
3、 WINDOWS法式中其实不是用物理地址来标识一个内存块,文件,使命或动态装入模块的,相反的,WINDOWS API给这些项目分派肯定的句柄,并将句柄返回给利用法式,然后经由过程句柄来进行操纵。
4、 在<>(南京年夜学出书社)一书中是这么说的:句柄是WINDOWS用来标识被利用法式所成立或利用的对象的独一整数,WINDOWS利用各类各样的句柄标识诸如利用法式实例,窗口,节制,位图,GDI对象等等。
5、WINDOWS句柄有点象C说话中的文件句柄。
6、 从上面的2个界说中的我们可以看到,句柄是一个标识符,是拿来标识对象或项目标,它就象我们的姓名一样,每一个人城市有一个,分歧的人的姓名纷歧样,可是,也可能有一个名字和你一样的人。
7、从数据类型上来看它只是一个16位的无符号整数。
8、利用法式几近老是经由过程挪用一个WINDOWS函数来取得一个句柄,以后其他的WINDOWS函数便可以利用该句柄,以援用响应的对象。
9、在WINDOWS编程中会用到年夜量的句柄,好比:HINSTANCE(实例句柄),HBITMAP(位图句柄),HDC(装备描写表句柄),HICON(图标句柄)等等,这傍边还有一个通用的句柄,就是HANDLE,好比下面的语句: HINSTANCE hInstance; 可以改成: HANDLE hInstance; 上面的2句语句都是对的。
10、 一个WINDOWS利用法式可以用分歧的方式取得一个特定项的句柄。
11、很多API函数,诸如CreateWindow,GlobalAlloc,OpenFile的返回值都是一个句柄值。
12、别的,WINDOWS也能经由过程利用法式的引出函数将一个句柄作为参数传送给利用法式,利用法式一旦取得了一个肯定项的句柄,即可在WINDOWS情况下的任何处所对这个句柄进行操纵。
13、实在句柄的年夜量利用已影响到了每个WINDOWS的法式设计。
14、 句柄只有当独一简直定了一个项目标时辰,它才起头成心义。
15、句柄对应着项目表中的一项,而只有WINDOWS自己才能直接存取这个表,利用法式只能经由过程API函数来处置分歧的句柄,举个例子来讲吧!好比:我们可觉得我们的利用法式申请一块内存块,经由过程挪用API函数GlobalAlloc,来返回一个句柄值: hMem=GlobalAlloc(......); 实在此刻hMem的值只是一个索引值,不是物理地址,利用法式还不克不及直接存取这块内存。
16、这儿还有一个话外题,就是,一般环境下我们在编程的时辰,给利用法式分派的内存都是可以移动的或是可以抛弃的,如许能使有限的内存资本充实操纵,所以,在某一个时辰我们分派的那块内存的地址是不肯定的,由于他是可以移动的,所以得先锁定那块内存块,这儿利用法式需要挪用API函数GlobalLock函数来锁定句柄。
17、以下: lpMem=GlobalLock(hMem); 如许利用法式才能存取这块内存。
18、 注重: 内查对象句柄,是用来标识某个内查对象的一个id 统一个对象的该id对每一个历程是分歧的,具体若何实现是ms不公然的算法,以下是一个近似的,可能的算法: 历程建立时,windows系统为历程机关了一个句柄表 当该历程但愿取得一个内查对象句柄或建立一个内查对象从而取得该对象句柄时 系统会将在句柄表中增添一个表项,表项的内容中存储了指向方针内查对象的指针 同时,系统返回这个表项在句柄表中的索引作为句柄。
本文到此讲授终了了,但愿对年夜家有帮忙。