C6219
Actualización: noviembre 2007
C6219
Advertencia C6219: Conversión implícita entre tipos de enteros semánticamente diferentes: comparando HRESULT de 1 o TRUE. Considere utilizar en su lugar la macro SUCCEEDED o FAILED.
Esta advertencia indica que HRESULT se compara con un valor explícito no de HRESULT de uno (1). Es probable que esto provoque resultados no deseados, porque el valor de éxito típico de HRESULT (S_OK)es 0; por consiguiente, al compararlo con un tipo booleano, se convertirá en false de manera implícita.
Ejemplo
El código siguiente genera esta advertencia porque CoGetMalloc devuelve HRESULT, que luego se compara con TRUE:
#include <windows.h>
void f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == TRUE)
{
// success code ...
}
else
{
// failure code
}
}
Casi siempre, esta advertencia se produce porque el código prueba por error un HRESULT comparándolo con un tipo booleano. Suele ser preferible utilizar 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( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// success code ...
}
else
{
// failure code
}
}
Para esta advertencia, el tipo SCODE es equivalente a HRESULT.