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:
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++.