Compartir a través de


C6220

Actualización: noviembre 2007

C6220

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

Esta advertencia indica que se está comparando un tipo HRESULT con un valor explícito, no un tipo HRESULT de -1, que no es un valor HRESULT debidamente formado. El valor -1 no representa un error en HRESULT (E_FAIL). Por consiguiente, la conversión implícita de un HRESULT a un entero generará un valor incorrecto y, con toda probabilidad, dará lugar a un resultado incorrecto.

Ejemplo

En la mayor parte de los casos, esta advertencia se produce porque el código espera equivocadamente que una función que debería devolver un valor HRESULT devuelva en su lugar un número entero, y utiliza –1 como valor de error. El siguiente ejemplo de código genera esta advertencia:

#include <windows.h>

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

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>

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

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

La comparación explícita es adecuada para comprobar los valores de HRESULT concretos, como E_FAIL, por ejemplo. De lo contrario, utilice las macros SUCCEEDED o FAILED.

Vea también

Otros recursos

SUCCEEDED

FAILED