C6230
Advertencia C6230: Conversión implícita entre tipos enteros semánticamente diferentes: usando HRESULT en un contexto booleano.
Esta advertencia indica que se utiliza un HRESULT vacío en un contexto, como la instrucción if , en que se espera un resultado booleano.Es probable que esto produzca resultados incorrectos.Por ejemplo, el valor típico de HRESULT (S_OK) para indicar que una operación es correcta es false cuando se prueba como booleano.
Ejemplo
El código siguiente genera esta advertencia:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (hr)
{
// code ...
}
else
{
// code ...
}
}
En la mayoría de los casos, deben usarse las macros SUCCEEDED o FAILED para probar el valor de HRESULT.Para corregir esta advertencia, utilice el código siguiente:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// code ...
}
else
{
// code ...
}
}
Para esta advertencia, el tipo SCODE es equivalente a HRESULT.
Tenga en cuenta que el uso de las opciones malloc y free (y las API de asignación de memoria dinámica relacionadas) tiene muchos riesgos en cuanto a pérdidas de memoria y excepciones.Para evitar todos estos tipos de problemas de pérdidas de memoria y excepciones, 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++.