C6214C6214

Advertencia C6214: Conversión entre diferentes tipos de enteros semánticamente diferentes: HRESULT de un tipo booleanowarning C6214: cast between semantically different integer types: HRESULT to a Boolean type

Esta advertencia indica que un HRESULT se convierte a un tipo booleano.This warning indicates that an HRESULT is being cast to a Boolean type. El valor correcto (S_OK) de HRESULT es igual a 0.The success value (S_OK) of an HRESULT equals 0. Sin embargo, 0 indica error en un tipo booleano.However, 0 indicates failure for a Boolean type. Convertir un HRESULT en un tipo booleano y utilizarlo en una expresión de prueba da lugar a un resultado incorrecto.Casting an HRESULT to a Boolean type and then using it in a test expression will yield an incorrect result. A veces, esta advertencia se produce cuando se almacena un HRESULT en una variable booleana.Sometimes, this warning occurs if an HRESULT is being stored in a Boolean variable. Cualquier comparación que utilice la variable booleana para comprobar si HRESULT es correcto o devuelve un error puede provocar resultados incorrectos.Any comparison that uses the Boolean variable to test for HRESULT success or failure could lead to incorrect results.

EjemploExample

El código siguiente genera esta advertencia:The following code generates this warning:

#include <windows.h>

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

Para corregir esta advertencia, utilice el código siguiente:To correct this warning, use the following code:

#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.For this warning, the SCODE type is equivalent to HRESULT.

Normalmente, se debe utilizar la macro SUCCEEDED o FAILED para probar el valor de un HRESULT.Usually, the SUCCEEDED or FAILED macro should be used to test the value of an HRESULT.

Para obtener más información, vea uno de los siguientes temas:For more information, see one of the following topics:

COMPLETASUCCEEDED

ERRÓNEOFAILED

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++.To leverage modern C++ memory allocation methodology, use the mechanisms that are provided by the C++ Standard Template Library (STL). Entre ellas se incluyen shared_ptr, unique_ptry Vector.These include shared_ptr, unique_ptr, and vector. Para obtener más información, vea punteros inteligentes y biblioteca estándar de C++.For more information, see Smart Pointers and C++ Standard Library.