Partilhar via


C6221

Aviso C6221: conversão implícita entre tipos inteiros semanticamente diferentes: comparando o HRESULT para um inteiro.Considere o uso de macros teve êxito ou falha em vez disso

Este aviso indica que uma HRESULT está sendo comparado a um número inteiro diferente de zero.Um sucesso em HRESULT (S_OK) é representado por um 0.Portanto, um elenco implícito de um HRESULT para um inteiro irá gerar um valor incorreto e é provável que levam ao resultado errado.Ele é normalmente causado por esperando por engano uma função para retornar um número inteiro, quando na verdade retorna um HRESULT.

Exemplo

O código a seguir gera este aviso comparando HRESULT contra um valor inteiro:

#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;
  }
}

Para corrigir esse aviso, o código a seguir usa a FAILED macro:

#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;
  }
}

Para este aviso, o SCODE tipo é equivalente a HRESULT.

Para obter mais informações, consulte Macro bem-sucedida e FAILED Macro.