句柄与指针的区别

句柄实际上是一种指向某种资源的指针,但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。

Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存。当你需要对某个内存进行直接操作时,可以使用GlobalLock锁住这段内存并获得指针来直接进行操作。  

 

“句柄”(handle),handle的本意是把柄,把手的意思。是你与操作系统打交道的东西。举个例子:比如你做了亏心事(我说的是比如,呵呵),不幸让我抓住了把柄,那么我让你做什么你就得做什么,因为你的把柄在我这。

我们编程的时候也是这样,比如我们要想操纵一个窗口,那我们就必须“抓住它的把柄”,只有这样,我们才能改变它的属性,改变它的式样,甚至销毁它(狠了点儿)。

我们再引用一个通俗一点的例子,比如你考上了大学,入学后,学校(操作系统)会给你一个学生证号。注意,这个号码是学校指定的,你无法自选。有了这个号码(学生证,假设一证多用)就可以享受学校提供的服务:如你就可以去图书馆借书,去食堂吃饭,去教室上课等等。但你不能到食堂里买啤酒,因为学校不允许这种服务。

而在计算机中系统提供的服务就是API调用,你有了HANDLE,就可以理直气壮地向系统提出调用API的服务。而指针的权力就大多了,有了指针你可以到处去喝酒,打架,学校(操作系统)管不着,所以句柄和指针的区别在于句柄只能调用系统提供的服务。而句柄虽然是一个能相互区别的号码,但与我们普通的ID号又有区别,普通的ID号是可以由程序员自己定义的,而句柄不行,它是对象生成时系统指定的,是为了区别系统中存在的各个对象,这个句柄不是由程序员赋给的。实际应用中,最常用的就是文件句柄和窗口句柄。例如,窗口句柄的值是一个长整数,每个窗体都用一个句柄来表示。所以句柄是不会重复的,很多的函数都会用到窗体的句柄。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458416.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS 11 适配

http://blog.csdn.net/st646889325/article/details/79066361 这一个不错的文章

谈谈自己对于Auth2.0的见解

Auth的原理网上有很多,我这里就不在赘述了。 这里有张时序图我个人觉得是比较合理而且直观的,(感谢这篇博文:http://justcoding.iteye.com/blog/1950270) 参照这个流程,模拟了下部分代码,当然是…

某个时间点 几天后

1、某个时间点 3天后 NSDate *maxDate [NSDate dateWithTimeInterval:3 * 24 * 60 * 60 sinceDate:date];//3天后 2、现在 3天后 NSDate *minDate [[NSDate date] initWithTimeIntervalSinceNow:3 * 24 * 60 * 60];

iPad开发--QQ空间,处理横竖屏布局,实现子控件中的代理

一.主界面横竖屏效果图 二.主界面加载, 初始化Dock(红色框的控件),判断程序启动时的屏幕方向.调用自己- (void)transitionToLandScape:(BOOL)isLandScape;方法,通知子控件屏幕方向改变,将此事件一直传递下去程序运行过程中屏幕方向改变会调用- (void)viewWillTransitionToSize:…

C++ Vector 汇总

C vector erase函数最近使用了顺序容器的删除元素操作,特此记录下该函数的注意事项。 在Cprimer中对c.erase(p) 这样解释的:c.erase(p) 删除迭代器p所指向的元素,返回一个指向被删元素之后元素的迭代器,若p指向尾元素&#xff…

vNext之旅(2):net451、dotnet5.4、dnx451、dnxcore50都是什么鬼

继上次”vNext之旅(1):从概念和基础开始”之后再次学习vNext重新遇到了弄不懂的事情,花了一些时间学习,今天来分享一下,为后人节省些时间。起因 在用vNext造轮子——框架的时候引入“Microsoft.Dnx.Runtime…

C++中模板使用详解

转自:http://www.360doc.com/content/09/0403/17/799_3011262.shtml 1. 模板的概念。 我们已经学过重载(Overloading),对重载函数而言,C的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值&#xf…

腾讯2016春招安全岗笔试题解析

腾讯2016春招安全岗笔试题解析 昨天(4月2日)晚上7:00到9:00做了腾讯春招安全岗的笔试题。下面解析一下: 题目解析 1 在生成随机数前用当前时间设置随机数种子应该是安全的。如果程序用固定的数产生随机数,其结果也是固定的。如果用…

网络请求数据解析时,判断数据是否为空

//判断是否为空 (BOOL)IsStringEmptyOrNull:(NSString *)str { if (!str) { // null object return true; }else if (str nil){ return true; }else { if ([str isKindOfClass:[NSNull class]]) { return true; …

VS项目属性的一些配置项的总结(持续增加。。。)

首先,解决方案和项目文件夹包含关系(c项目): VS解决方案和各个项目文件夹以及解决方案和各个项目对应的配置文件包含关系:假设新建一个项目ssyy,解决方案起名fangan,注意解决方案包括项目,此时生成的最外层…

shell编程中date用法(转)

原文地址:http://blog.sina.com.cn/s/blog_61c006ea0100mgxe.html 1、date --help %% 输出%符号 a literal % %a 当前域的星期缩写 locale’s abbreviated weekday name (Sun..Sat) %A 当前域的星期全写 locale’s full weekday name, variable length (Sunday..Saturday) %b 当…

linux下搭建FTP服务器

LINUX FTP简单配置 FTP配置1、#vi /etc/vsftp/vsftpd.conf #主要配置几个关键的就可以 anonymous_enableNO #拒绝匿名访问 chroot_local_userYES #锁定用户目录&#xff0c…

微信正则表达式 iOS

#pragma mark - 微信号的正则表达式 微信账号仅支持6-20个字母、数字、下划线或减号,以字母开头 (BOOL)isWxNumber:(NSString *)WXNum{ NSString *passWordRegex "^[a-zA-Z][a-zA-Z0-9_-]{5,19}$"; NSPredicate *passWordPredicate [NSPredica…

子元素增加margin-top会增加给父元素的问题

假设我们有如下代码 <div id"father" style"height:400px;width:400px;background:#e4393c;">     <div id"child" style"background:green;height:100px;width:100px;margin-top:40px;"></div>   </div&g…

Python 关键字

from&#xff1a;https://blog.csdn.net/liang19890820/article/details/68488392简述 关键字是预先保留的标识符&#xff0c;每个关键字都有特殊的含义。编程语言众多&#xff0c;但每种语言都有相应的关键字&#xff0c;Python 也不例外&#xff0c;它自带了一个 keyword 模块…

Zend Studio使用教程之升级Zend Studio(1/3)

2019独角兽企业重金招聘Python工程师标准>>> Zend Studio是新一代的专业级智能PHP IDE&#xff0c;它旨在帮助开发人员提高工作效率&#xff0c;创造出高品质的PHP应用程序&#xff01;它包含了PHP开发所必须的部件&#xff0c;通过一整套的编辑、调试、分析、优化和…

身份证正则表达式

#pragma mark - 身份证的正则表达式 (BOOL)checkUserID:(NSString *)userID { //长度不为18的都排除掉 if (userID.length!18) { return NO; } //校验格式 NSString *regex2 "^(^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d…

java中可重入锁的学习总结

2019独角兽企业重金招聘Python工程师标准>>> 经常看到网上的人说&#xff0c;可重入锁一词&#xff0c;但是总是没怎么了解&#xff0c;到底什么是可重入锁&#xff0c;一直是一个模糊的概念&#xff0c;下面来大致总结一下。 可重入锁&#xff1a;指的是同一个线程…

Oracle DB优化

http://www.jb51.net/article/77876.htm http://www.jb51.net/article/56881.htm http://danni505.blog.51cto.com/15547/1163711/ http://blog.csdn.net/giianhui/article/details/8172786转载于:https://www.cnblogs.com/diyunpeng/p/5132392.html

设置View单个圆角

#pragma mark - 设置View单个圆角 (void)addCornerWithView:(UIView *)aView type:(UIRectCorner)aCorners size:(CGSize)aSize { // 根据矩形画带圆角的曲线 UIBezierPath *maskPath [UIBezierPath bezierPathWithRoundedRect:aView.bounds byRoundingCorners:aCorn…