C6225
Actualización: noviembre 2007
C6225
Advertencia C6225: Conversión implícita entre tipos enteros semánticamente diferentes: asignando 1 o TRUE a HRESULT. Considere utilizar en su lugar S_FALSE
Esta advertencia indica que se está asignando o inicializando un tipo HRESULT con el valor de 1 explícito. Los tipos booleanos indican el éxito mediante un valor distinto de cero, mientras que el éxito (S_OK) en HRESULT se indica mediante el valor 0. Esta advertencia se produce con frecuencia por la confusión accidental de los tipos booleanos y HRESULT. Para indicar el éxito, debe utilizarse la constante simbólica S_OK.
Ejemplo
En el código siguiente, la asignación de HRESULT genera esta advertencia:
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (SUCCEEDED(CoGetMalloc(1, &pMalloc)))
{
// code ...
hr = S_OK;
}
else
{
// code ...
hr = 1;
}
}
Para corregir esta advertencia, utilice el código siguiente:
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (SUCCEEDED(CoGetMalloc(1, &pMalloc)))
{
hr = S_OK;
// code ...
}
else
{
hr = S_FALSE;
// code ...
}
}
Para esta advertencia, el tipo SCODE es equivalente a HRESULT.
Para indicar error, se debe utilizar E_FAIL u otra constante.