COM 中的错误代码

为了指示成功或失败,COM 方法和函数返回 HRESULT 类型的值。 HRESULT 是 32 位整数。 HRESULT 的高阶位表示成功或失败。 零 (0) 表示成功,1 表示失败。

这会生成以下数值范围:

  • 成功代码:0x0-0x7FFFFFFF。
  • 错误代码:0x80000000–0xFFFFFFFF。

少数 COM 方法不返回 HRESULT 值。 例如, AddRefRelease 方法返回无符号的长值。 但是,每个返回错误代码的 COM 方法都通过返回 HRESULT 值来执行此操作。

若要检查 COM 方法是否成功,请检查返回的 HRESULT 的高阶位。 Windows SDK 标头提供了两个使此操作更简单的宏: SUCCEEDED 宏和 FAILED 宏。 如果 HRESULT 是成功代码,则 SUCCEEDED 宏返回 TRUE;如果它是错误代码,则返回 FALSE。 以下示例检查 CoInitializeEx 是否成功。

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | 
    COINIT_DISABLE_OLE1DDE);

if (SUCCEEDED(hr))
{
    // The function succeeded.
}
else
{
    // Handle the error.
}

有时测试反向条件更方便。 FAILED 宏与 SUCCEEDED 相反。 对于错误代码,它返回 TRUE ,对于成功代码,则返回 FALSE

HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | 
    COINIT_DISABLE_OLE1DDE);

if (FAILED(hr))
{
    // Handle the error.
}
else
{
    // The function succeeded.
}

在本模块的后面部分,我们将探讨有关如何构建代码以处理 COM 错误的一些实用建议。 (请参阅 COM.) 中的错误处理

下一步

在 COM 中创建对象