第6章
在前五章,作者将细节问题隐藏起来。本章主要将讨论COM的细节问题--HRESULT,GUID,注册表,最后介绍了COM库中一些函数。
HRESULT:
是QueryInterface的返回值。在设计组件的时候,可以用它来返回争取及错误代码。
HRESULT值实际上是一个可分成3个域的32位值,
HRESULT的低16位(0-15位)是函数返回值;16到30bit位返回的是设备值(操作系统代码),可以使用HRESULT_FACILITY宏来查看HRESULT值的设备;31bit返回严重级别。
WIN32的API中的FormatMessage函数可以将HRESULT错误信息打印出来,判断成功和失败使用SUCCEEDED和FAILED宏。
用户还可以自定义跟接口相关的HRESULT返回值,其中设备值部分必须是FACILITY_ITF,使用MAKE_HRESULT宏。还有几条规则:
(1)不能使用0x0000到0x01FF范围内的值。这是COM定义的FACILITY_ITY保留值。
(2)不要传播FACILITY_ITY错误代码。
(3)尽可能使用通用的COM成功和失败代码。
(4)避免定义自己的HRESULT,可以在函数中使用一个输出参数。
HRESULT其实是一个LONG型的值。预定义的HRESULT值在WINERROR.H,打开该文件看了一下。第31bit是一个Severity - indicates success/fail