C6214
Aggiornamento: novembre 2007
C6214
avviso C6214: cast tra tipi integer semanticamente diversi: da HRESULT a un tipo Boolean
Questo avviso indica che un tipo HRESULT è stato sottoposto a cast in un tipo Boolean. Il valore che conferma la riuscita (S_OK) di un HRESULT è 0. Tuttavia, per un tipo Boolean 0 indica un errore. L'esecuzione del cast di HRESULT in un tipo Boolean e il relativo utilizzo in un'espressione di test restituisce un risultato non corretto. Talvolta, l'avviso viene visualizzato se un HRESULT viene memorizzato in una variabile Boolean. Qualsiasi confronto che utilizza la variabile Boolean per testare l'esito positivo o negativo di HRESULT potrebbe produrre risultati non corretti.
Esempio
Il codice seguente genera questo avviso:
#include <windows.h>
BOOL f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if ((BOOL)hr) // warning 6214
{
// success code ...
return TRUE;
}
else
{
// failure code ...
return FALSE;
}
}
Per risolvere il problema, utilizzare il codice seguente:
#include <windows.h>
BOOL f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// success code ...
return TRUE;
}
else
{
// failure code ...
return FALSE;
}
}
Ai fini del presente avviso, il tipo SCODE equivale a HRESULT.
In generale, per verificare il valore di un tipo HRESULT è necessario utilizzare la macro SUCCEEDED o FAILED.