一、前言
  程序设计中,错误处理必不可少,而且通常要占用很大的篇幅。本回书着落在 COM 中的错误(异常)的处理方法。
  在组件程序中,如果遇到错误,一般有两个方式进行处理。

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

E_INVALIDARG

0x80070057

参数错误

E_OUTOFMEMORY

0x8007000E

内存错误

E_NOTIMPL

0x80004001

未实现

E_POINTER

0x80004003

无效指针

E_HANDLE

0x80070006

无效句柄

E_ABORT

0x80004004

终止操作

E_ACCESSDENIED

0x80070005

拒绝访问

E_NOINTERFACE

0x80004002

不支持接口

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

参数

含义

值(二进制)

sev 严重程度

成功

00

成功,但有一些报告信息

01

警告

10

错误

11

fac 设备信息

FACILITY_AAF

00000010010

FACILITY_ACS

00000010100

FACILITY_BACKGROUNDCOPY

00000100000

FACILITY_CERT

00000001011

FACILITY_COMPLUS

00000010001

FACILITY_CONFIGURATION

00000100001

FACILITY_CONTROL

00000001010

FACILITY_DISPATCH

00000000010

FACILITY_DPLAY

00000010101

FACILITY_HTTP

00000011001

FACILITY_INTERNET

00000001100

FACILITY_ITF

00000000100

FACILITY_MEDIASERVER

00000001101

FACILITY_MSMQ

00000001110

FACILITY_NULL

00000000000

FACILITY_RPC

00000000001

FACILITY_SCARD

00000010000

FACILITY_SECURITY

00000001001

FACILITY_SETUPAPI

00000001111

FACILITY_SSPI

00000001001

FACILITY_STORAGE

00000000011

FACILITY_SXS

00000010111

FACILITY_UMI

00000010110

FACILITY_URT

00000010011

FACILITY_WIN32

00000000111

FACILITY_WINDOWS

00000001000

FACILITY_WINDOWS_CE

00000011000

code 唯一错误码

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

 

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