C6220
avviso C6220: Cast implicito tra tipi integer semanticamente diversi: confronto di HRESULT con -1 in corso.Si consiglia l'utilizzo della macro SUCCEEDED o FAILED
L'avviso indica che è in corso un confronto tra HRESULT e un valore -1 esplicito diverso daHRESULT, ovvero un HRESULT non ben formato.Un errore in HRESULT (E_FAIL) non è rappresentato da un -1.Pertanto, un cast implicito di un HRESULT a un Integer genera un valore errato e probabilmente produce il risultato non corretto.
Esempio
Nella maggior parte dei casi, l'avviso è causato dal codice, che prevede erroneamente che una funzione che dovrebbe restituire un HRESULT restituisca invece un numero intero, utilizzando -1 come valore per l'esito negativo.L'esempio di codice riportato di seguito genera questo avviso:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == -1)
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
È consigliabile utilizzare le macro SUCCEEDED o FAILED per eseguire il test del valore di un tipo HRESULT.Per risolvere il problema, utilizzare il codice seguente:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
Ai fini del presente avviso, il tipo SCODE equivale a HRESULT.
Il confronto esplicito è adatto per verificare valori HRESULT specifici, ad esempio E_FAIL.In alternativa, utilizzare la macro SUCCEEDED o FAILED.
Per ulteriori informazioni, vedere Macro SUCCEEDED e Macro FAILED (le pagine potrebbero essere in inglese).