Compartir a través de


C6214

Actualización: noviembre 2007

C6214

Advertencia C6214: Conversión entre diferentes tipos de enteros semánticamente diferentes: HRESULT de un tipo booleano

Esta advertencia indica que un HRESULT se convierte a un tipo booleano. El valor de éxito (S_OK) de HRESULT es igual a 0. Sin embargo, 0 indica un error con un tipo Boolean. Convertir un HRESULT en un tipo booleano y utilizarlo en una expresión de prueba da lugar a un resultado incorrecto. A veces, esta advertencia se produce cuando se almacena un HRESULT en una variable booleana. Cualquier comparación que utilice la variable booleana para comprobar el éxito o el error de HRESULT puede provocar resultados incorrectos.

Ejemplo

El código siguiente genera esta advertencia:

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  if ((BOOL)hr) // warning 6214
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

Para corregir esta advertencia, utilice el código siguiente:

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  hr = CoGetMalloc(1, &pMalloc);
  if (SUCCEEDED(hr)) 
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

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

Normalmente, se debe utilizar la macro SUCCEEDED o FAILED para probar el valor de un HRESULT.