MAPI 中的错误处理

适用于:Outlook 2013 | Outlook 2016

成功、警告和错误值是使用 32 位数字(称为结果句柄)或 HRESULT 返回的。 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
对于接口方法返回的大多数状态代码;该值由接口定义。 也就是说,两个 HRESULT 值与从两个不同的接口返回的 32 位值完全相同,可能具有不同的含义。
FACILITY_DISPATCH
对于后期绑定 IDispatch 接口错误。
FACILITY_RPC
对于从远程过程调用返回的状态代码。
FACILITY_STORAGE
对于从与结构化存储相关的 IStorageIStream 方法调用返回的状态代码。 代码 (低 16 位的状态代码) (Windows错误代码范围内的值,即小于 256) 与相应的Windows错误具有相同的含义。

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