C6214

警告 C6214:语义不同的整数类型之间的强制转换: HRESULT 转换为 Boolean 类型

此警告意味着 HRESULT 被强制转换为布尔值类型。HRESULT 的成功值 (S_OK) 等于 0。但是,对于布尔值类型来说,0 指示失败。如果将 HRESULT 强制转换为布尔值类型,然后在测试表达式中使用它,将产生错误的结果。有时,如果将 HRESULT 存储在布尔型变量中,会出现此警告。在任何比较过程中使用布尔型变量来测试 HRESULT 成功还是失败时,可能会导致错误的结果。

示例

下面的代码生成此警告:

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  if ((BOOL)hr) // warning 6214
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

若要更正此警告,请使用下面的代码:

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  hr = CoGetMalloc(1, &pMalloc);
  if (SUCCEEDED(hr)) 
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

对于此警告,SCODE 类型等效于 HRESULT。

通常,应当使用 SUCCEEDED 或 FAILED 宏来测试 HRESULT 的值。

有关更多信息,请参见下列主题之一:

成功

失败

若要利用当今 C++ 内存分配方法,请使用 C++ 标准模板库 (STL) 提供的机制。这些包括shared_ptr, unique_ptr, 和 vector有关更多信息,请参见智能指针(现代 C++)C++ 标准库参考