C6216
Aggiornamento: novembre 2007
C6216
avviso C6216: cast inserito dal compilatore tra tipi integer semanticamente diversi: da un tipo Boolean a HRESULT
L'avviso indica che è in uso un Boolean come HRESULT senza che sia stato eseguito il cast esplicito. I tipi Boolean indicano l'esito positivo mediante un valore diverso da zero, l'esito positivo (S_OK) in HRESULT è indicato da un valore 0. Il valore tipico dell'esito negativo per le funzioni che restituiscono un valore booleano false corrisponde allo stato di esito positivo dell'operazione quando viene testato come HRESULT. È probabile che ciò produca risultati errati.
Esempio
Il codice seguente genera questo avviso:
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
HRESULT f( REFGUID riid1, REFGUID riid2 )
{
// code ...
return IsEqual(riid1, riid2);
}
Per risolvere il problema, utilizzare il codice seguente:
#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;
}
}
Ai fini del presente avviso, il tipo SCODE equivale a HRESULT.