C6219

Actualización: noviembre 2007

C6219

Advertencia C6219: Conversión implícita entre tipos de enteros semánticamente diferentes: comparando HRESULT de 1 o TRUE. Considere utilizar en su lugar la macro SUCCEEDED o FAILED.

Esta advertencia indica que HRESULT se compara con un valor explícito no de HRESULT de uno (1). Es probable que esto provoque resultados no deseados, porque el valor de éxito típico de HRESULT (S_OK)es 0; por consiguiente, al compararlo con un tipo booleano, se convertirá en false de manera implícita.

Ejemplo

El código siguiente genera esta advertencia porque CoGetMalloc devuelve HRESULT, que luego se compara con TRUE:

#include <windows.h>

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

Casi siempre, esta advertencia se produce porque el código prueba por error un HRESULT comparándolo con un tipo booleano. Suele ser preferible utilizar las macros SUCCEEDED o FAILED para probar el valor de HRESULT. Para corregir esta advertencia, utilice el código siguiente:

#include <windows.h>

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

Para esta advertencia, el tipo SCODE es equivalente a HRESULT.

Vea también

Otros recursos

SUCCEEDED

FAILED