`
pcajax
  • 浏览: 2163247 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HRESULT是什么,应该如何理解

 
阅读更多
句柄的由来[1] 
windows 之所以要设立句柄,根本上源于内存管理机制的问题—虚拟地址,简而言之数据的地址需要变动,变动以后就需要有人来记录管理变动,(就好像户籍管理一样),因此系统用句柄来记载数据地址的变更。
数据对象加载进入内存中之后即获得了地址,但是这个地址并不是固定的,(至于为什么以及什么情况下变动具体需要大家研究虚拟地址的原理与机制我这里只提我确定知道的例子)数据对象会根据需要在内存与硬盘之间游弋移动(例如不常用的数据会为常用数据让出其占用的内存空间进而被淘汰进硬盘中的虚拟内存之中以优化配置整体系统的资源进而提升效率性能),因此其物理地址总是变动的,那么作为管理者 则必须对 管理对象所发生的变化了如指掌才行,因此系统为进程分配固定的地址(句柄)来存储进程下的数据对象变化后的地址也就是当前的地址,其实设计机制很简单 :系统的某个部门移动了对象的地址后,同时上报给句柄所属部门管理者,管理者将改动写入句柄即可。该数据被重新起用时去其所属句柄内按内容存取即可。
句柄,英文:HANDLE,在Windows编程中是一个很重要的概念,在许多地方都扮演着重要的角色。但由此而产生的句柄概念也大同小异,比如:《Microsoft Windows 3 Developer's Workshop》(Microsoft Press,by Richard Wilton)一书中句柄的概念是:在Windows环境中,句柄是用来标识项目的。
程序设计中,句柄是一种特殊的智能指针 。当一个应用程序要引用其他系统(如数据库操作系统)所管理的内存块或对象时,就要使用句柄。
句柄与普通指针的区别在于,指针包含的是引用对象的内存地址,而句柄则是由系统所管理的引用标识,该标识可以被系统重新定位到一个内存地址上。这种间接访问对象的模式增强了系统对引用对象的控制。
在上世纪80年代的操作系统(如Mac OS 和Windows)的内存管理中,句柄被广泛应用。Unix系统的文件描述符基本上也属于句柄。和其它桌面环境一样,WindowsAPI大量使用句柄来标识系统中的对象,并建立操作系统与用户空间之间的通信渠道。例如,桌面上的一个窗体由一个HWND类型的句柄来标识。如今,内存容量的增大和虚拟内存算法使得更简单的指针愈加受到青睐,而指向另一指针的那类句柄受到冷淡。尽管如此,许多操作系统仍然把指向私有对象的指针以及进程传递给客户端的内部数组下标称为句柄。[2] 
在《WINDOWS编程短平快》(南京大学出版社)一书中是这么说的:句柄是WINDOWS用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控件,位图,GDI对象等等。WINDOWS句柄有点象C语言中的文件句柄
分享到:
评论

相关推荐

    HRESULT错误检查简化器

    标题中的“HRESULT错误检查简化器”是一个专门针对HRESULT值进行错误检查的工具或技术,它旨在简化在C++编程中处理HRESULT返回值的过程。HRESULT是Windows API和其他COM接口广泛使用的错误代码类型,用来报告操作...

    深入HRESULT与Windows Error Codes的区别详解

    在Windows编程中,错误处理是至关重要的,而`HRESULT`和`Windows Error Codes`是两种常见的错误处理机制。本文将深入解析它们之间的区别...理解并正确使用这两种错误处理机制,对于编写健壮的Windows应用程序至关重要。

    VBS真麻烦

    通常,这样的文本文件会包含关键的代码片段、错误信息、调试步骤等,有助于读者理解问题的本质和解决方法。 在VBS编程中,常见问题可能包括语法错误、类型不匹配、权限问题、对象引用错误等。解决这些问题通常需要...

    com编程入门(值得收藏)

    COM编程入门是一个面向初学者的主题,旨在帮助程序员理解并开始使用Component Object Model(COM)这一核心技术。COM是微软开发的一种二进制接口标准,它允许不同应用程序之间共享和交互对象,不受特定编程语言的...

    COM 编程入门精讲

    COM 编程入门精讲是为刚刚接触 COM 的程序员提供编程指南,帮助他们理解 COM 的基本概念。COM 即组件对象模型,是 Component Object Model 取前三个字母的缩写,这三个字母在当今 Windows 的世界中随处可见。 COM ...

    COM编程入门 什么是COM,如何使用COM

    7. **错误处理**: COM使用 HRESULT 值作为返回码,通过HRESULT可以判断调用是否成功,以及失败的原因。 8. **激活服务**: COM提供激活服务,如本地服务器、In-Process Server(DLL)和Out-of-Process Server(EXE)...

    CDHtmlDialog与网页交互技巧整理.pdf

    CDHtmlDialog是MFC(Microsoft Foundation Classes)库中的一个类,它允许开发者在对话框中嵌入HTML页面,从而实现更加丰富和...理解并熟练运用这些交互技巧,能够帮助开发者创建出更加灵活、用户体验更好的应用程序。

    VC++COM编程.pdf

    程序员需要学会如何正确处理HRESULT,以判断操作是否成功,并根据返回的错误代码进行相应的错误处理。 通过COM技术,开发者可以利用Windows操作系统内置的组件和第三方提供的COM对象,如Windows外壳组件Shell。ATL...

    WsdlReader

    这个工具对于开发者来说是学习和理解如何与Web服务交互的一个重要参考。通过WsdlReader,程序员可以自动化处理生成代理类的过程,而无需手动编写繁琐的代码,从而提高开发效率。 在C#中,Web Service是一种基于SOAP...

    为软错误代码查询

    在使用这些产品时,如果遇到问题,系统会生成一个特定的错误代码,如“0x80070005”、“HRESULT 0x80040154”等,这些代码由字母、数字和符号组成,看起来可能复杂且难以理解,但实际上它们包含了丰富的信息。...

    VCADO数据库开发[总结].pdf

    ### VCADO数据库开发知识点概述 #### 一、导入ADO库 ...此外,随着技术的发展,现代的应用开发可能会更多地采用.NET Framework或C#等新技术栈来进行数据库开发,但理解传统的VC+ADO技术仍然是非常重要的基础。

    C语言实现COM组件

    HRESULT (__stdcall *QueryInterface)(void* this_ptr, REFIID riid, void** ppvObject); ULONG (__stdcall *AddRef)(void* this_ptr); ULONG (__stdcall *Release)(void* this_ptr); HRESULT (__stdcall *...

    练习4

    - `HRESULT GetName(BSTR *pName)`:获取组件名称,默认为“SimpleCOM”,如果设置了名称,则返回设置的名称。 - `HRESULT Add(double dLeftValue, double dRightValue, double *dRetVal)`:执行加法运算。 - `...

    Win32 COM编程入门

    通过学习这些内容,开发者可以更好地理解和应用COM技术,构建出高效、可靠的应用程序。 ### 结论 COM作为一种强大的组件技术,在Windows平台上有着广泛的应用。了解其基本原理和技术细节对于Windows开发者来说至关...

    OPC配置工具

    结合标签"OPC Server Tool",我们可以理解这是一个专为OPC服务器设计的工具,不仅提供基本的配置功能,可能还具备高级特性,如数据记录、报警管理、安全性设置等。使用这类工具,工程师可以更高效地设置OPC服务器,...

    Delphi 实现删除、移动正在使用的文件源代码.rar

    首先,我们要理解 Delphi 是一个基于 Pascal 语言的集成开发环境(IDE),它提供了丰富的类库和组件,使得文件操作变得相对简单。在 Delphi 中,我们通常会使用 TFile 和 TDirectory 类来处理文件和目录的相关操作。...

    用com组件方式写的window下通用串口通信接口

    在Windows操作系统中,通用串行通信(Serial Communication)是一种常用的数据传输方式...此外,还可以结合MSDN文档和其他资源,深入理解COM组件的工作原理和Windows串口通信的API使用方法,以提高编程效率和代码质量。

    操作系统---进程状态转换PDF

    一个进程在其生命周期内可能会经历不同的状态变化,这些状态变化对于理解和设计高效的操作系统至关重要。 #### 二、进程状态 在典型的操作系统中,进程可能处于以下几种状态: 1. **就绪状态(Ready)**:进程...

    com开发文档总汇 com开发文档总汇

    这个“COM开发文档总汇”应该包含了从基础到高级的各个层面,可以帮助开发者深入理解COM机制,提高软件的复用性和可维护性。通过阅读文档中的例子和指南,你可以更好地运用COM技术在实际工作中解决问题。

Global site tag (gtag.js) - Google Analytics