首页 > 其他分享 >HRESULT是什么,应该如何理解

HRESULT是什么,应该如何理解

时间:2022-11-25 18:34:43浏览次数:76  
标签:标识 对象 句柄 WINDOWS HRESULT 如何 地址 理解 Windows


句柄的由来 [1] 


windows 之所以要设立句柄,根本上源于 ​​内存​​​管理机制的问题— ​​​虚拟地址​​,简而言之数据的地址需要变动,变动以后就需要有人来记录管理变动,(就好像户籍管理一样),因此系统用句柄来记载数据地址的变更。


数据对象加载进入内存中之后即获得了地址,但是这个地址并不是固定的,(至于为什么以及什么情况下变动具体需要大家研究虚拟地址的原理与机制我这里只提我确定知道的例子)数据对象会根据需要在内存与硬盘之间游弋移动(例如不常用的数据会为常用数据让出其占用的内存空间进而被淘汰进硬盘中的虚拟内存之中以优化配置整体系统的资源进而提升效率性能),因此其物理地址总是变动的,那么作为管理者 则必须对 管理对象所发生的变化了如指掌才行,因此系统为进程分配固定的地址(句柄)来存储进程下的数据对象变化后的地址也就是当前的地址,其实设计机制很简单 :系统的某个部门移动了对象的地址后,同时上报给句柄所属部门管理者,管理者将改动写入句柄即可。该数据被重新起用时去其所属句柄内按内容存取即可。


句柄,英文:HANDLE,在Windows编程中是一个很重要的概念,在许多地方都扮演着重要的角色。但由此而产生的句柄概念也大同小异,比如:《Microsoft Windows 3 Developer's Workshop》(Microsoft Press,by Richard Wilton)一书中句柄的概念是:在Windows环境中,句柄是用来标识项目的。


在 ​​程序设计​​​中,句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如 ​​​数据库​​​、 ​​​操作系统​​)所管理的内存块或对象时,就要使用句柄。


句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强了系统对引用对象的控制。


在上世纪80年代的操作系统(如Mac OS 和Windows)的 ​​内存管理​​​中,句柄被广泛应用。Unix系统的文件描述符基本上也属于句柄。和其它桌面环境一样,Windows ​​​API​​大量使用句柄来标识系统中的对象,并建立操作系统与用户空间之间的通信渠道。例如,桌面上的一个窗体由一个HWND类型的句柄来标识。如今,内存容量的增大和虚拟内存算法使得更简单的指针愈加受到青睐,而指向另一指针的那类句柄受到冷淡。尽管如此,许多操作系统仍然把指向私有对象的指针以及进程传递给客户端的内部数组下标称为句柄。 [2] 

WINDOWS程序中并不是用


在《WINDOWS编程短平快》(南京大学出版社)一书中是这么说的:句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控件,位图,GDI对象等等。WINDOWS句柄有点象C语言中的


从上面的2个定义中我们可以看到,句柄是一个


标签:标识,对象,句柄,WINDOWS,HRESULT,如何,地址,理解,Windows
From: https://blog.51cto.com/u_15834343/5887404

相关文章

  • SpringDataJpa源码理解
    SpringDataJpa源码理解上一篇讲解了SpringDataJpa的基本使用,下面简单说一下源码我们以其中的一个test为案例进行分析: 我们可以发现resumeDao它是一个代理对象,类型是Si......
  • 如何画数据流图
    快速阅读如何画数据流图,以及如何在visio2013中画数据流图。数据流图中各个园元分别代表什么含义。什么是数据流图DFD=dataflowdiagram在系统设计阶段。是对将来要构建的系......
  • 如何实时监控是否有待发送的文件?
    客户在使用知行EDI系统发送文件时,有时候交易伙伴对文件的时效性要求非常严格,如果没有及时发出报文,有可能会影响供应商评级扣分,甚至被交易伙伴开具罚单。因此客户常常会有......
  • 【计算机视觉】如何解决目标检测中的漏检问题
    前言目标检测算法的漏检,一直是极具挑战性的问题。谈到漏检(lowrecall),离不开较高的检测精度(highprecision)的要求,只有在precision得到保证条件下讨论recall才有意义。下面......
  • php中如何实现SSO单点登录
    什么是单点登录SSO(SingleSign-On)SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他......
  • 如何快速在线更换云主机的CDROM光盘
    当今互联网云主机(虚拟机,公有云)基本都是用上了KVM技术,作为运维工程师的你有没有遇到需要在运行的云主机插入一个光驱,或者安装系统的时候需要更换ISO?在这种情况下,通常你会遇到......
  • 如何通过场景规划帮助企业实现全面预算管理?
    当今商业环境的复杂性,受到许多外界因素的影响。从技术发展到大国之间的贸易战,再加上罕见的“黑天鹅”事件,扰乱了世界经济的秩序。如今疫情尚未停息,使得众多企业面临不可预测......
  • php中如何优雅的写复杂if-else
    提前return优化逻辑结构,让正常流程走主干,非正常流程提前return,去除不必要的else优化前$a=1;$b=2;$c=3;if($a==1){if($b==2){if($c==3){......
  • 不安装标准件如何直接导出含有标准件的BOM
    SOLIDWORKS里面的Toolbox库可以说是使用非常方便的,基本上常用的标准件都可以在Toolbox里面找到,而且直接从任务窗格拖拽到装配体中,操作非常简单。然而使用Toolbox也会存在一......
  • 【iOS-cocos2d-X 游戏开发之十四】Xcode中c++&Object-C混编,详细介绍如何在cocos2dx中
    本站文章均为​​ 李华明Himi ​​​原创,转载务必在明显处注明Cocos2dx系列博文的上一篇详细介绍了如何在Xcode中利用jni调用Android的Java层代码,还没有看过的童鞋,请移步......