Compartir a través de


C6221

Actualización: noviembre 2007

C6221

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

Esta advertencia indica que un tipo HRESULT se está comparando con un entero distinto de cero. El valor 0 representa el éxito en HRESULT (S_OK). 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. Con frecuencia la causa es que se espera que una función devuelva un entero cuando, en realidad, devuelve un HRESULT.

Ejemplo

El código siguiente genera esta advertencia, al comparar HRESULT con un valor entero:

#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 corregir esta advertencia, el código siguiente utiliza la macro FAILED:

#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 esta advertencia, el tipo SCODE es equivalente a HRESULT.

Vea también

Otros recursos

SUCCEEDED

FAILED