HRESULT

✍ dations ◷ 2025-06-08 05:50:34 #数据类型

在计算机编程领域中,HRESULT是一种在 Windows 操作系统中使用的数据类型,并且曾更早在 IBM/Microsoft OS/2 操作系统中使用。用来表示错误和警告的情况。

HRESULT的最初目的是为了防止OS/2操作系统的不同子系统中的错误代码之间的冲突,正式地规定第三方和微软内部使用的错误代码范围。它是基于数字的错误代码,HRESULT中的各个位编码包含有关错误代码的性质及其来源的信息。

HRESULT 错误码在COM编程领域很常见,它们构成了标准化的COM错误处理约定的基础。

HRESULT值有32位,分为三个字段:严重性代码、设施代码和错误代码。严重性代码指示返回值是表示信息、警告还是错误。设施代码标识负责错误的系统区域。错误代码是分配用于表示异常的唯一编号。 每个异常映射到不同的HRESULT。

HRESULT的结构如下:

ITF设施代码随后被再次用作COM组件可以定义自己的组件特定错误代码的范围。

HRESULT是一个不透明的结果句柄,定义为从函数成功返回为0或正值,对失败为负值。一般的, 成功的函数返回 S_OK HRESULT 值 (这个HRESULT等于0)。但在极少数情况下,函数可能返回成功代码与附加信息,例如S_FALSE=0x01

当显示HRESULT时,它们通常呈现为 无符号十六进制值, 通常用 0x 做前缀。在这种情况下,可以通过以十六进制数字8或更高开始来标识指示故障的数字。

HRESULT最初在IBM/Microsoft OS/2操作系统中作为一般目的的错误返回代码,并随后在Windows NT中使用。 Microsoft Visual Basic 的大幅度增加HRESULT错误报告机制,通过关联的一个 IErrorInfo 对象错误代码,通过存储指向一个IErrorInfoCOM对象的线程本地存储。 IErrorInfo机制允许程序将各种信息与特定的HRESULT错误相关联:引发错误的对象的类,引发错误的对象的接口,错误文本; 以及帮助文件中帮助主题的链接。 此外,HRESULT错误的接收器可以根据需要获得错误消息的本地化文本。

随后,HRESULT和相关联的 IErrorInfo 机制用作COM中的默认错误报告机制。

在Windows中支持IErrorInfo机制是非常不一致的。 较旧的Windows API往往不支持它,返回HRESULTS没有任何 IErrorInfo 数据。 更多的现代Windows COM子系统通常会在IErrorInfo对象的消息描述中提供大量的错误信息。 IErrorInfo错误机制的更高级功能——帮助链接和按需定位,很少使用。

在.NET Framework中,从本机代码转换为托管代码时,HRESULT / IErrorInfo错误代码将转换为CLR异常; 当从托管转换为本机COM代码时,CLR异常将转换为HRESULT / IErrorInfo错误代码。

winerror.h文件定义了一些通用的HRESULT值。 有些HRESULT值被硬编码在给定子系统的关联头文件(.h文件)中。 这些值也使用Microsoft Windows平台SDK或DDK在相应的标题(.h)文件中定义。

要检查返回HRESULT的调用是否成功,请确保S字段为0(即数字为非负数)或使用FAILED()。要获取HRESULT的代码部分,请使用HRESULT_CODE()。您还可以使用名为ERR.EXE的工具获取值,并将其转换为相应的错误字符串。 另一个名为ERRLOOK.EXE的工具也可用于显示与给定HRESULT值相关联的错误字符串。 可以在Visual Studio命令提示符下运行ERRLOOK.EXE。

Windows 原生的 SetErrorInfoGetErrorInfo API 用于将 HRESULT 返回码与对应的IErrorInfo对象相关联。

FormatMessage API函数可用于将一些非IErrorInfo HRESULT转换为用户可读的字符串。

相关

  • 工作台工作台是一个坚固耐用的桌子,它们设计的范围从简单到非常复杂的平面设计都有,可被视为工具一部分。工作台根据工作的需要是由许多不同的材料包括金属,木材,石材和复合材料所组成
  • 新皮质新皮质(neocortex、拉丁语:neocortex,拉丁文:neo:新的,cortex:皮)是哺乳动物大脑的一部分,在脑半球顶层,大约2-4毫米厚,分为六层,为大脑皮质的一部分。其于一些高等功能如知觉,运动指令(英
  • 梅耶贝尔《耶弗塔的誓言》,1812年首演。《格拉纳达的流亡》,1822年首演《十字军在埃及》,1824年首演《恶魔罗勃》,1831年首演《胡格诺教徒》,1836年首演《西里西亚军营》,1844年首演《先知
  • 湖南省行政区划湖南省简称“湘”,因地处洞庭湖以南得名“湖南”。2005年,全境分为14个地级行政区即13个地级市和1自治州(湘西土家族苗族自治州),122个县级行政区即64县、16县级市、7自治县和35
  • 王正中 (中央研究院院士)王正中(1936年2月10日-2017年8月22日),药理学与寄生虫学权威,中央研究院院士(第19届生命科学组)。童年时曾感染寄生虫,任职于美国默克药厂时,发现治疗河盲症的机制,透过药厂与国际卫生
  • 两冲程循环两冲程循环(Two-stroke engine)是内燃机基本运转形式中的一种。对往复活塞式发动机来说,两冲程循环以“上行”和“下行”两个冲程完成一个工作循环中的进气、压缩、做功、排气
  • 关联规则学习关联规则学习(英语:Association rule learning)是一种在大型数据库中发现变量之间的有趣性关系的方法。它的目的是利用一些有趣性的量度来识别数据库中发现的强规则。 基于强
  • 扁豆行动扁豆行动,是1944年2月23日起苏联因车臣人和印古什人在第二次世界大战期间于北高加索叛乱进行的强制人口转移活动,由苏联内务部首脑贝利亚执行,车臣-印古什苏维埃社会主义自治共
  • 汪先烺汪先烺(?-1861年),字向之,安徽桐城人。清朝官员。汪先烺为道光十五年(1835年)甲午科举人,道光二十七年(1847年)考中丁未科张之万榜二甲第六十一名进士。分至户部为学习主事,三年期满成候
  • 乌诺·克拉米乌诺·克拉米(芬兰语:Uuno Klami,1900年9月20日-1961年5月29日),芬兰作曲家。早年曾在巴黎和维也纳学习,并参加过多次芬兰与苏联的战争。1961年因心脏病发作死于一艘帆船上。克拉米