首先什么是句柄?(理解了句柄,也就知道了句柄和指针的区别了)

所谓句柄实际上是一个数据,是一个Long (整长型)的数据。

句柄是WONDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄。

从上面的定义中的我们可以看到,句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样,每个人都会有一个,不同的人的姓名不一样,但是,也可能有一个名字和你一样的人。从数据类型上来看它只是一个16位的无符号整数。应用程序几乎总是通过调用一个WINDOWS函数来获得一个句柄,之后其他的WINDOWS函数就可以使用该句柄,以引用相应的对象。

如果想更透彻一点地认识句柄,我可以告诉大家,句柄是一种指向指针的指针。我们知道,所谓指针是一种内存地址。应用程序启动后,组成这个程序的各对象是住留在内存的。如果简单地理解,似乎我们只要获知这个内存的首地址,那么就可以随时用这个地址访问对象。但是,如果您真的这样认为,那么您就大错特错了。我们知道,Windows是一个以虚拟内存为基础的操作系统。在这种系统环境下,Windows内存管理器经常在内存中来回移动对象,依此来满足各种应用程序的内存需要。对象被移动意味着它的地址变化了。如果地址总是如此变化,我们该到哪里去找该对象呢?

为了解决这个问题,Windows操作系统为各应用程序腾出一些内存储地址,用来专门登记各应用对象在内存中的地址变化,而这个地址(存储单元的位置)本身是不变的。Windows内存管理器在移动对象在内存中的位置后,把对象新的地址告知这个句柄地址来保存。这样我们只需记住这个句柄地址就可以间接地知道对象具体在内存中的哪个位置。这个地址是在对象装载(Load)时由系统分配给的,当系统卸载时(Unload)又释放给系统。

句柄地址(稳定)→记载着对象在内存中的地址────→对象在内存中的地址(不稳定)→实际对象

本质:WINDOWS程序中并不是用物理地址来标识一个内存块,文件,任务或动态装入模块的,相反的,WINDOWS API给这些项目分配确定的句柄,并将句柄返回给应用程序,然后通过句柄来进行操作。

但是必须注意的是程序每次从新启动,系统不能保证分配给这个程序的句柄还是原来的那个句柄,而且绝大多数情况的确不一样的。假如我们把进入电影院看电影看成是一个应用程序的启动运行,那么系统给应用程序分配的句柄总是不一样,这和每次电影院售给我们的门票总是不同的一个座位是一样的道理。

***************************************************************************************************

句柄是一些表的索引也就是指向指针的指针,句柄和指针都是地址,句柄是Windows编程的一个关键性的概念,编写Windows应用程序总是要和各种句柄打交道。

所谓句柄,就是一个唯一的数,用以标识许多不同的对象类型,如窗口、菜单、内存、画笔、画刷、电话线路等。在Win32里,句柄是指向一个“无类型对象”(void*)的指针,也就是一个4字节长的数据。无论它的本质是什么,句柄并不是一个真正意义上的指针。

从构造上看,句柄是一个指针,尽管它没有指向用于存储某个对象的内存位置。事实上,句柄指向一个包含了对该对象进行的引用的位置。

句柄的声明是这样的:

typedef void *HANDLE

由于Windows是一个多任务操作系统,它可以同时运行多个程序或一个程序的多个副本。这些运行的程序称为一个实例。

为了对同一程序的多个副本进行管理,Windows引入了实例句柄。Windows为每个应用程序建立一张表,实例句柄就好象是这张表的一个索引。

不同在于:

1,句柄所指的可以是一个很复杂的结构,并且很有可以是与系统有关的,比如说上面所说的线程的句柄,它指向的就是一个类或者结构,他和系统有很密切的关系,当一个线程由于不可预料的原因,而终止时在系统就可以回它所占用的资源,如CPU,内存等等,反过来想可以知道,这个句柄中的某一些项,是与系统进行交互的。由于Windows系统,是一个多任务的系统,它随时都可能要分配内存,回收内存,重组内存。

2,指针它也可以指向一个复杂的结构,但是通常是用户定义的,所以的必需的工作都要用户完成,特别是在删除的时候。

但在VC++6.0中也有一些指针,它们都是处理一些小问题才用的,如最常见的字符的指针,它也是要用户处理的如果你动态分配了内存;但是Cstring就不要用户处理了,它其实是VC++中的一个类,所以的操作都由成员函数完成,产生(分配)由构造函数,删除(回收)由析构函数完成。

c语言windows编程句柄,HANDLE句柄(windows编程)相关推荐

  1. windows下的Handle句柄和Linux下的Fd文件标示符

    在操作系统层面上,文件操作也有类似于FILE的一个概念,在Linux里,这叫做文件描述符(File Descriptor),而在Windows里,叫做句柄(Handle)(以下在没有歧义的时候统称为句 ...

  2. 推动Windows的限制:句柄

    这是我推出Windows  系列的第五篇文章,在这篇文章中  ,我探索了Windows管理的资源的数量和大小上限,例如物理内存,虚拟内存,进程和线程.这是整个推动限制系列的索引.虽然他们可以独立存在, ...

  3. xp下 c语言用什么编程软件,学C语言在windows XP环境下用什么编程软件好??

    DEV-CPP 可以哦 特别简单的 Dev-C++是一个C&C++开发工具,使用 Delphi/Kylix 开发, 它是一款自由软件,遵守GPL协议.它集合了GCC.MinGW等众多自由软件, ...

  4. Windows编程 第四回 Windows程序的生与死(下)

    致歉 很抱歉,读者看到的这篇文章将是我写的最没什么条理的一篇了,由于这一块儿内容是所有Windows程序的核心与基础,所以我分了三回来写.我想讲 得既易懂有又丰富,无奈本人才疏学浅,每每一提笔就要查很 ...

  5. DirectX游戏编程入门——第一部分(Windows和DirectX游戏编程引言)——认识Windows

    本系列文章由 net_assassin 编写,转载请注明出处. http://blog.csdn.net/net_assassin/article/category/1100363 作者:net_as ...

  6. 句柄Handle的含义及使用

    本文转载于:https://blog.csdn.net/swordarcher/article/details/81744930 1.句柄 : 头文件:winnt.h(也可以使用windows.h头文 ...

  7. c语言图形句柄无效,“句柄”,quot;句柄无效quot;是什么意思?

    句柄 句柄概念在WINDOWS编程中是一个很重要的概念,在许多地方都扮演着重要的角色.但由此而产生的句柄概念也大同小异,比如:>(MicrosoftPress,byRichardWilton)一 ...

  8. HANDLE:句柄的概念

    HANDLE:句柄,是Windows用来表示对象的(不是C++的对象),HWND是其中一种,HWND是HANDLE,但HANDLE不只是HWND,HANDLE是一个通用句柄表示,HWND是一个专用表示 ...

  9. 《精通Windows API-函数、接口、编程实例》——第4章文件系统

    第4章文件系统 4.2 磁盘和驱动器管理 文件系统的基本概念: 包括磁盘分区,卷,目录,文件对象,文件句柄,文件映射 1.磁盘分区: 物理磁盘,逻辑磁盘 2.卷: 也称逻辑驱动器,是NTFS,FAT3 ...

最新文章

  1. bin二进制文件的运行
  2. YBTOJ洛谷P3750:分手是祝愿(期望dp)
  3. P4196-[CQOI2006]凸多边形/[模板]半平面交【计算几何】
  4. 2016 ICPC 北京
  5. 用XenoCode 2006 加密dll(.NET
  6. 《MBA一日读2.0 读书笔记》
  7. Unicode 字符集
  8. Java课程设计之简易计算器:设计的计算器应用程序是基于AWT的,可以完成加法、减法、乘法、除法和取余运算。
  9. 阿里云服务器申请免费ssl证书
  10. MATLAB 读取和显示 bin 文件数据
  11. android的listview分组显示的时候layout_marginTop失效的解决办法
  12. Uncaught initialization exception thrown by servlet
  13. 无人再谈“永恒牛市”
  14. DAPM之四:dapm机制深入分析(下)
  15. 机器学习算法(决策树)-Lect03
  16. MCS-51的中断系统
  17. Apple 的 WWDC 2022 活动时间以及观看方法
  18. 美国iPS细胞治疗癌症最新进展
  19. 定制化删除ES索引数据
  20. 你只管追求卓越,成功自然会尾随而到

热门文章

  1. 最新超好看释梦个人发卡网源码+详细教程
  2. cs224w(图机器学习)2021冬季课程学习笔记2: Traditional Methods for ML on Graphs
  3. 联想自带win7家庭版升级win7旗舰版
  4. 接天莲叶无穷碧,映日荷花别样红
  5. 企业网站为什么托管服务器
  6. 扬帆优配|翻倍牛股“高台跳水”,一度跌停,啥情况
  7. MACBOOK系统优化清理工具CleanMyMAC X最新版
  8. 学历教育如何做快手广告投放?快手广告投放的展现量介绍
  9. 家庭健身赛道闯入新选手,一面智能镜撑起一座健身房
  10. React 转小程序现状