Compartir a través de


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 correcto (S_OK) de HRESULT es igual a 0.Sin embargo, 0 indica error en un tipo booleano.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 si HRESULT es correcto o devuelve un error 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.

Para obtener más información, consulte uno de los temas siguientes:

SUCCEEDED

FAILED

Para aprovechar la metodología de asignación de memoria moderna de C++, use los mecanismos proporcionados por la Biblioteca de plantillas estándar (STL) de C++.Estos incluyen shared_ptr, unique_ptr y vector.Para obtener más información, vea Punteros inteligentes (C++ moderno) y Referencia de biblioteca estándar de C++.