Partilhar via


C6219

Aviso C6219: Conversão implícita entre diferentes semanticamente inteiro tipos: Comparando HRESULT para 1 ou TRUE.Em vez disso, use macro teve êxito ou falha

Este aviso indica que um HRESULT está sendo comparado com um explícito não-HRESULT valor de um (1). Isso provavelmente levar a resultados incorretos porque o valor sucesso típico de HRESULT (S_OK)é 0, comparando-os com um tipo booliano implicitamente converterá para false.

Exemplo

O código a seguir gera este aviso porque o CoGetMalloc Retorna um HRESULT, que é comparado com TRUE:

#include <windows.h>

void f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  
  if (hr == TRUE)
  {
    // success code ...
  }
  else
  {
    // failure code   
  }
}

Na maioria das vezes, esse aviso é causado pelo código de teste por engano um HRESULT em relação a um valor booliano. Ele é geralmente melhor usar o SUCCEEDED ou FAILED as macros para testar o valor de um HRESULT. Para corrigir esse aviso, use o seguinte código:

#include <windows.h>

void f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  
  if (SUCCEEDED(hr))
  {
    // success code ...
  }
  else
  {
    // failure code   
  }
}

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

Consulte também

Outros recursos

BEM-SUCEDIDA

FALHA