`

函数句柄和指针的区别是什么

阅读更多
句柄实际上是一种指向某种资源的指针,但与指针又有所不同:指针对应着一个数据在内存中的地址,得到了指针就可以自由地修改该数据。Windows并不希望一般程序修改其内部数据结构,因为这样太不安全。所以Windows给每个使用GlobalAlloc等函数声明的内存区域指定一个句柄(本质上仍是一个指针,但不要直接操作它),平时你只是在调用API函数时利用这个句柄来说明要操作哪段内存。当你需要对某个内存进行直接操作时,可以使用GlobalLock锁住这段内存并获得指针来直接进行操作。

“句柄”(handle),handle的本意是把柄,把手的意思。是你与操作系统打交道的东西。举个例子:比如你做了亏心事(我说的是比如,呵呵),不幸让我抓住了把柄,那么我让你做什么你就得做什么,因为你的把柄在我这。我们编程的时候也是这样,比如我们要想操纵一个窗口,那我们就必须“抓住它的把柄”,只有这样,我们才能改变它的属性,改变它的式样,甚至销毁它(狠了点儿)。我们再引用一个通俗一点的例子,比如你考上了大学,入学后,学校(操作系统)会给你一个学生证号。注意,这个号码是学校指定的,你无法自选。有了这个号码(学生证,假设一证多用)就可以享受学校提供的服务:如你就可以去图书馆借书,去食堂吃饭,去教室上课等等。但你不能到食堂里买啤酒,因为学校不允许这种服务。而在计算机中系统提供的服务就是API调用,你有了HANDLE,就可以理直气壮地向系统提出调用API的服务。而指针的权力就大多了,有了指针你可以到处去喝酒,打架,学校(操作系统)管不着,所以句柄和指针的区别在于句柄只能调用系统提供的服务。而句柄虽然是一个能相互区别的号码,但与我们普通的ID号又有区别,普通的ID号是可以由程序员自己定义的,而句柄不行,它是对象生成时系统指定的,是为了区别系统中存在的各个对象,这个句柄不是由程序员赋给的。实际应用中,最常用的就是文件句柄和窗口句柄。例如,窗口句柄的值是一个长整数,每个窗体都用一个句柄来表示。所以句柄是不会重复的,很多的函数都会用到窗体的句柄。   转百度
分享到:
评论

相关推荐

    MFC中 各类的指针和句柄的获取方法

    MFC中 各类的指针和句柄的获取方法,各种API函数的使用

    MATLAB编程过程中遇到的不错的小功能.rar

    使用函数句柄:函数句柄允许您在MATLAB中创建指向函数的指针,并使用该指针来调用函数。 使用匿名函数:在MATLAB中,可以使用匿名函数来创建没有函数名称的函数,并将其传递给其他函数或脚本。 创建向量化代码:使用...

    智能指针与弱引用详解

    智能指针是c++ 中的一个概念,因为c++ 本身不具备垃圾回收机制,而且指针也不具备构造函数和析构函数,所以为了实现内存( 动态存储区) 的安全回收,必须对指针进行一层封装,而这个封装就是智能指针,其实说白了,...

    labview获取子窗口句柄FindwindowsEX(API).vi

    该函数获得一个窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数查找子窗口,从排在给定的子窗口后面的下一个子窗口开始。在查找时不区分大小写。 参数; (1)hwndParent:要查找的子窗口所在的父...

    在子窗口中调用父窗口的成员函数的实例

    2、在子窗口的初始化函数里加上父窗口的指针 ,然后在子窗口的类中使用全局变量保存父窗口的指针。如: 父窗口类为CMyDlg(父类为CDialog),子窗口类为CMySon(父类为CDialog),则在CMyDlg::OnInitDialog()中初始化子...

    SDK编程入门经典,己经够详细了吧

    3.回调(CALLBACK):这其实是C语言中的函数指针,函数指针一般在大项目搭框架时 常常使用。也就是你设计好要得到什么,把接口定义好,具体怎么实现完全交给 别人,别人只要把函数名传给你就OK。这个函数名就是地址,...

    显示窗口句柄 Spy++ Lite是一款强有力的编程辅助工具 功能强大 免费 绿色 可用 好用

    可以以十六进制和十进制两种不同方式显示窗口句柄等所有数值。本软件还可以简单调节窗口的状态和形为,如是否可见,是否可用,最大化,激活等。除此以外,您还可以把它当作一个截图的小工具来用。:) 下面举两个...

    e语言-易语言根据图像取句柄

    易语言根据图像取句柄源码例程程序调用API函数取图像句柄。点评:易语言根据图像取句柄源码支持图标、光标、图片等。一般用于置托盘图标、设置鼠标指针、光标图片、GDI绘图、位图操作等。

    draggableRectangle:绘制可以通过鼠标指针拖动或调整大小的矩形-matlab开发

    名称-值对xdirlock :逻辑标量:锁定 x 方向拖动ydirlock :逻辑标量:锁定 y 方向拖动buttonDownFcn : 函数句柄:鼠标点击时执行的回调buttonDragFcn : 函数句柄:鼠标拖动移动时执行的回调buttonUpFcn : 函数句柄...

    函数PlaySound和sndPlaySound的用法(delphi)

    函数PlaySound和sndPlaySound的用法(delphi) 一.PlaySound函数的声明为: BOOL PlaySound(LPCSTR pszSound,HMODULE hmod,DWORD fdwSound); 1.参数pszSound:是指定了要播放声音的字符串,该参数可以是WAVE文件的名字,...

    API之网络函数---整理网络函数及功能

    FindClose 关闭由FindFirstFile函数创建的一个搜索句柄 FindFirstFile 根据文件名查找文件 FindNextFile 根据调用FindFirstFile函数时指定的一个文件名查找下一个文件 FlushFileBuffers 针对指定的文件句柄,刷新...

    关于c++ 智能指针及 循环引用的问题

    c++智能指针介绍 由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要... RAII 的主要原则是为所有堆分配资源提供所有权,例如动态分配内存或系统对象句柄、析构函数包含要删除或释放资源的代码的堆栈分

    程序员面试宝典-第三版(高清带目录)

     7.6 指针和句柄  第8章 循环、递归与概率  8.1 递归基础知识  8.2 典型递归问题  8.3 循环与数组问题  8.4 螺旋队列问题  8.5 概率  第9章 STL模板与容器  9.1 向量容器  9.2 泛型编程  9.3 模板  0章 ...

    C语言通用范例开发金典.part2.rar

    ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.7 双亲、孩子和兄弟节点的查询(链式结构) 162 范例1-61 双亲、孩子和兄弟节点的查询 162 ∷相关函数:Parent函数 ...

    C语言通用范例开发金典.part1.rar

    ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.7 双亲、孩子和兄弟节点的查询(链式结构) 162 范例1-61 双亲、孩子和兄弟节点的查询 162 ∷相关函数:Parent函数 ...

    C 开发金典

    ∷相关函数:Parent函数 LeftChild函数 RightChild函数 LeftSibling函数 RightSibling函数 1.4.7 双亲、孩子和兄弟节点的查询(链式结构) 162 范例1-61 双亲、孩子和兄弟节点的查询 162 ∷相关函数:Parent函数 ...

    Smart-Pointer:基于 C++ 的智能指针

    一般来说,主要目标是将任何堆分配的资源(例如动态分配的内存或系统对象句柄)的所有权赋予堆栈分配的对象,该对象的析构函数包含删除或释放资源的代码。 这里首先初始化任何类型的指针,然后立即将这些指针传递给...

    关于C++ 智能指针的一点认识

     网上的资料显示智能指针有引用辅助类和使用句柄类这两种实现方法。但从本质上看,都是实现:  1、使得智能指针这个类拥有与指针相似的使用方法。(通过重载*,->等符号可以实现)  2、需要借助一块堆上的内存...

    MulThreadclass.rar_AfxBeginThread_cwinthread_多线程 同步

    线程间要处理好同步与通讯,如果用CWinThread好一点,直接是一个线程对象,如果用AfxBeginThread,那必须定个全局函数,或者写个静态函数,一般是传个this指针进去,然后再用这个指针调用本类函数的成员函数,...

Global site tag (gtag.js) - Google Analytics