Welcome

首页 / 软件开发 / VC.NET / COM组件设计与应用(十二)——错误与异常处理

COM组件设计与应用(十二)——错误与异常处理2009-12-25杨老师

一、前言

程序设计中,错误处理必不可少,而且通常要占用很大的篇幅。本回书着落在 COM 中的错误(异常)的处理方法。

在组件程序中,如果遇到错误,一般有两个方式进行处理。

二、简单返回

对于比较简单的错误,直接返回表示错误原因的 HRESULT。比如下面几个就是常见的错误值:

E_INVALIDARG0x80070057参数错误
E_OUTOFMEMORY0x8007000E内存错误
E_NOTIMPL0x80004001未实现
E_POINTER0x80004003无效指针
E_HANDLE0x80070006无效句柄
E_ABORT0x80004004终止操作
E_ACCESSDENIED0x80070005拒绝访问
E_NOINTERFACE0x80004002不支持接口

另外,你还可以返回自己构造 HRESULT 错误值。方法是使用宏 MAKE_HRESULT(sev,fac,code)

参数含义值(二进制)
sev 严重程度

成功00
成功,但有一些报告信息01
警告10
错误11
fac 设备信息

FACILITY_AAF00000010010
FACILITY_ACS00000010100
FACILITY_BACKGROUNDCOPY00000100000
FACILITY_CERT00000001011
FACILITY_COMPLUS00000010001
FACILITY_CONFIGURATION00000100001
FACILITY_CONTROL00000001010
FACILITY_DISPATCH00000000010
FACILITY_DPLAY00000010101
FACILITY_HTTP00000011001
FACILITY_INTERNET00000001100
FACILITY_ITF00000000100
FACILITY_MEDIASERVER00000001101
FACILITY_MSMQ00000001110
FACILITY_NULL00000000000
FACILITY_RPC00000000001
FACILITY_SCARD00000010000
FACILITY_SECURITY00000001001
FACILITY_SETUPAPI00000001111
FACILITY_SSPI00000001001
FACILITY_STORAGE00000000011
FACILITY_SXS00000010111
FACILITY_UMI00000010110
FACILITY_URT00000010011
FACILITY_WIN3200000000111
FACILITY_WINDOWS00000001000
FACILITY_WINDOWS_CE00000011000
code 唯一错误码

16位(bit) 你自己定义去吧

调用者得到返回的 HRESULT 值后,也可以使用宏 HRESULT_SEVERITY()、HRESULT_FACILITY()、HRESULT_CODE() 来取得sev错误程度、fac设备信息和 code 错误代码。