C6221
Aggiornamento: novembre 2007
C6221
avviso C6221: cast implicito tra tipi integer semanticamente diversi: confronto di HRESULT con un integer. Si consiglia l'utilizzo della macro SUCCEEDED o FAILED
L'avviso indica che è in corso un confronto tra HRESULT e un intero diverso da zero. Poiché un esito positivo in HRESULT (S_OK) è rappresentato da un valore 0, un cast implicito di un HRESULT a un integer genererà un valore non corretto e determinerà probabilmente il risultato sbagliato. Ciò è spesso causato dalla previsione erronea che una funzione restituisca un valore integer quando in realtà restituisce un HRESULT.
Esempio
Il codice seguente genera questo avviso confrontando HRESULT con un valore integer:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == 4)
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
Per risolvere il problema, nel codice seguente viene utilizzata la macro FAILED:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
Ai fini del presente avviso, il tipo SCODE equivale a HRESULT.