C6220
Ostrzeżenie C6220 - niejawny cast między całkowitą semantycznie różnych typów: porównanie HRESULT-1.Należy rozważyć użycie zamiast niego makro SUCCEEDED lub nie powiodło się
To ostrzeżenie wskazuje, że HRESULT jest porównywana z jawne, non-HRESULT wartość -1, który nie jest poprawnie sformułowanym HRESULT.Niepowodzenie w HRESULT (E_FAIL) nie jest reprezentowana przez -1.W związku z tym, niejawny cast z HRESULT na liczbę całkowitą wygeneruje niepoprawną wartość i może doprowadzić do niewłaściwego wynik.
Przykład
W większości przypadków to ostrzeżenie jest spowodowana przez kod omyłkowo oczekiwano, że funkcja, która powinna zwrócić HRESULT zamiast zwraca liczbę całkowitą, używając –1 jako wartość Brak.Poniższy przykładowy kod generuje ostrzeżenie to:
#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;
}
}
Najlepiej używać SUCCEEDED lub FAILED makro do testowania wartości HRESULT.Aby poprawić to ostrzeżenie, należy użyć następującego kodu:
#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;
}
}
W przypadku tego ostrzeżenia, SCODE typu jest równoważne z HRESULT.
Jawne porównanie jest właściwe sprawdzić, czy szczególne HRESULT wartości, takie jak E_FAIL.W przeciwnym razie, użyj SUCCEEDED lub FAILED makr.
Aby uzyskać więcej informacji, zobacz Makro pomyślnie i nie powiodło się makro.