Marvin's Blog【程式人生】

Ability will never catch up with the demand for it

05 Sep 2020

Windows编程接口中的HResult

Windows系统的编程接口常常用HResult返回执行结果的好坏。HResult通常是一个整型值,其字节宽度随计算机位数的增加而增加。现在常常把HResult看成一个带符号的32位整型值。和Linux的编程接口一样,采用负值,也就是最高位为1的值来表示错误代码。

HResult可以看作是HandleResult的缩写。应用程序常常通过Handle来引用系统资源,然后Result表示对这些资源操作所产生的结果。

HRsult的结构,根据Wikipedia HRESULT的记录:

其低16位为错误码,而高16位则划分出不同的功能区域,最大的区域是Facility区域,用来划分操作类型。对于Win32接口,Facility就是FACILITY_WIN32(0x007)。以错误码0x80070152为例,最高位置一,表示这是一个错误码,Facility为007,表示是一个Win32错误,低16为的0x0152,代表FT_WRITE_FAILURE。

其他比较常见的Facility当属FACILITY_URT,也就是.NET相关的Facility。

HResult中的R,C,N,X做特殊使用,可参考Wikipedia页面,此处不做介绍乐。

在winerror.h头文件中,定义乐HRESULT_FROM_WIN32宏,可以将Win32的错误码转为HResult。

HResult通常会对应一段描述,可以使用诸如GetRestrictedErrorInfo等接口来获取,更多参考How to get descriptions for HRESULT error codes for WinRT / Windows 10 Store code?

其他参考

(本篇完)

comments powered by Disqus