MAPI 中的错误处理

适用于:Outlook 2013 | Outlook 2016

使用称为结果句柄或 HRESULT 的 32 位数字返回成功、警告和错误值。 HRESULT 真的不是任何东西的句柄:它只是一个 32 位值,在值中编码了多个字段。 零结果表示成功,非零结果表示失败。

32 位平台上的 MAPI 仅适用于 HRESULT 值。

下图显示了 32 位平台的 HRESULT 格式。

HRESULT 格式

HRESULT 格式

HRESULT 中的高顺序位指示返回值是表示成功还是失败。 如果设置为零,则该值指示成功。 如果设置为 1,则表示失败。

R、C、N 和 r 位在 HRESULT 中保留。

这两个版本中的“设施”字段指示错误的责任范围。 有几个设施,但绝大多数 MAPI 错误都使用 FACILITY_ITF 来表示接口错误。 当前使用的最常见功能包括:FACILITY_NULL、FACILITY_ITF、FACILITY_DISPATCH、FACILITY_RPC和FACILITY_STORAGE。 如果需要新设施,Microsoft 会分配它们,因为它们需要是唯一的。 下表描述了各种设施字段。

设施 说明
FACILITY_NULL
对于广泛适用的常见状态代码,例如S_OK或E_OUTOF_MEMORY;值为零。
FACILITY_ITF
对于从接口方法返回的大多数状态代码;值由 接口定义。 也就是说,从两个不同接口返回的具有完全相同的 32 位值的两个 HRESULT 值可能具有不同的含义。
FACILITY_DISPATCH
对于后期绑定 IDispatch 接口错误。
FACILITY_RPC
对于从远程过程调用返回的状态代码。
FACILITY_STORAGE
对于从 IStorageIStream 方法返回的状态代码,调用与结构化存储相关的 。 包含 (以下 16 位) Windows 错误代码范围内的状态代码 (,即小于 256) 与相应的 Windows 错误具有相同的含义。

代码字段是分配给表示错误或警告的唯一数字。