错误处理策略
由于接口方法是虚拟的,因此调用方不可能知道可从任何一个调用返回的完整值集。 方法的一个实现可能返回五个值:另一个可能会返回八个。
文档列出了可能为每个方法返回的常见值;这些值是必须在代码中检查和处理的值,因为它们具有特殊含义。 可能会返回其他值,但由于它们没有意义,因此无需编写特殊代码来处理它们。 对零或非零的简单检查是否足够。
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 中的 错误处理