错误处理策略

由于接口方法是一种虚拟方式,因此调用方不可能知道任何一个调用返回的一整组值。 一种方法实现可能返回五个值;另一种可能返回八个值。

文档列出了可能为每个方法返回的常见值;这些值具有特殊含义,必须在代码中检查和处理。 可能会返回其他没用的值,无需编写特殊代码来进行处理。 只需进行简单的零或非零检查。

HRESULT 值

COM 函数和方法的返回值为 HRESULT。 COM 中已更改某些 HRESULT 的值,以消除与系统错误代码的所有重复和重叠。 重复的系统错误代码已更改为 FACILITY_WIN32,重叠的错误代码仍保留在FACILITY_NULL 中。 下表列出了常见的 HRESULT 值及其他值。

HRESULT 说明
E_ABORT
0x80004004
由于未指定错误,操作已中止。
E_ACCESSDENIED
0x80070005
常见的访问被拒绝错误。
E_FAIL
0x80004005
发生了未指定的失败。
E_HANDLE
0x80070006
使用了无效句柄。
E_INVALIDARG
0x80070057
一个或多个参数无效。
E_NOINTERFACE
0x80004002
QueryInterface 方法无法识别请求的接口。 不支持 接口。
E_NOTIMPL
0x80004001
该方法未实现。
E_OUTOFMEMORY
0x8007000E
该方法无法分配必要的内存。
E_PENDING
0x8000000A
尚未提供完成操作所需的数据。
E_POINTER
0x80004003
使用了无效指针。
E_UNEXPECTED
0x8000FFFF
已发生灾难性故障。
S_FALSE
0x00000001
方法成功并返回布尔值 FALSE
S_OK
0x00000000
方法成功。 如果预期返回布尔值,则返回值为 TRUE

网络错误

如果错误代码的前四位数字为 8007,则表示系统或网络错误。 可以使用 net 命令解码这些类型的错误。 若要解码错误,请先将十六进制错误代码的最后四位数字转换为十进制。 然后在命令提示符处键入以下内容,其中十进制代码替换为要解码的返回值:

net helpmsg <decimal_code>

net 命令返回错误说明。 例如,如果 COM 返回错误 8007054B,请将 054B 转换为十进制 (1355)。 然后键入以下命令:

net helpmsg 1355

net 命令返回错误说明:“指定的域不存在”。

COM 中的错误处理