COM 组件 中的函数一般返回值都是 HRESULT 类型,该值代表着 COM 接口 调用的结果正确与否。HRESULT是一个32位的整型值。其中最高位代表着成功还是失败。0 表示成功,1 表示失败。

这种方法会将结果值划分为两个区间:

  • 成功的值:0x00000000 —— 0x7FFFFFFF。

  • 失败的值:0x80000000 —— 0xFFFFFFFF。

有一些 COM 组件中的函数返回的不是 HRESULT 类型的值,例如 AddRef 和 Release 方法返回的是一个 unsinged long 类型,但是每个返回包含错误代码的方法都是 HRESULT 类型。

可以通过HRESULT高位的值来确定 COM 组件方法执行是否成功。Windows SDK 为此提供两个便捷的宏操作:SUCCEEDED 和 FAILED。前者返回TRUE 代表成功,FALSE 代表失败。下面是一个使用案例:

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

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

有些时候测试失败与否更加方便,使用 FAILED 宏替代 SUCCEEDED。返回 TURE 代表失败,FALSE 代表成功。

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

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