Compartilhar via


C6221

Aviso C6221: Conversão implícita entre diferentes semanticamente inteiro tipos: Comparando HRESULT para um inteiro.Em vez disso, use macros teve êxito ou falha

Este aviso indica que um HRESULT está sendo comparado a um número inteiro diferente de zero. Um sucesso em HRESULT (S_OK) é representada por 0. Portanto, uma conversão implícita de um HRESULT para um inteiro irá gerar um valor incorreto e é provável que a liderar o resultado errado. É normalmente causado por esperando por engano uma função para retornar um número inteiro quando ele realmente retorna um HRESULT.

Exemplo

O código a seguir gera este aviso comparando HRESULT com 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 o 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 esse aviso, o SCODE tipo é equivalente a HRESULT.

Consulte também

Outros recursos

BEM-SUCEDIDA

FALHA