C6216
Actualización: noviembre 2007
C6216
Advertencia C6216: Conversión insertada por el compilador entre tipos de enteros semánticamente diferentes: un tipo booleano de HRESULT
Esta advertencia indica que se utiliza un booleano como HRESULT sin una conversión explícita. Los tipos booleanos indican el éxito mediante un valor distinto de cero, mientras que el éxito (S_OK) en HRESULT se indica mediante un valor de 0. El valor típico para las funciones que devuelven un valor booleano de false constituye un estado de éxito cuando se prueba como HRESULT. Es probable que esto produzca resultados incorrectos.
Ejemplo
El código siguiente genera esta advertencia:
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
HRESULT f( REFGUID riid1, REFGUID riid2 )
{
// code ...
return IsEqual(riid1, riid2);
}
Para corregir esta advertencia, utilice el código siguiente:
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
HRESULT f( REFGUID riid1, REFGUID riid2 )
{
if (IsEqual(riid1, riid2) == TRUE)
{
// code ...
return S_OK;
}
else
{
// code ...
return E_FAIL;
}
}
Para esta advertencia, el tipo SCODE es equivalente a HRESULT.