C6221

警告 C6221:语义不同的整数类型之间的隐式强制转换: 将 HRESULT 与一个整数进行比较。 应考虑改用 SUCCEEDED 或 FAILED 宏

此警告意味着要将 HRESULT 与非零整数进行比较。 HRESULT (S_OK) 中的成功由 0 表示。 因此,如果将 HRESULT 隐式强制转换为整数,则将生成错误的值并可能导致错误的结果。 通常,产生此警告的原因在于,代码错误地认为某个函数应返回整数,而该函数实际上返回 HRESULT。

示例

在下面的代码中,因为将 HRESULT 与整数值进行比较,所以会生成此警告:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (hr == 4)
  {
    // failure code ...
    return S_FALSE;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

为了更正此警告,下面的代码使用 FAILED 宏:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (FAILED(hr))
  {
    // failure code ...
    return S_FALSE;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

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

有关更多信息,请参见 SUCCEEDED Macro(SUCCEEDED 宏)和 FAILED Macro(FAILED 宏)。