C6221
Ostrzeżenie C6221: niejawna cast między całkowitą semantycznie różnych typów: porównanie HRESULT na liczbę całkowitą.Należy rozważyć użycie zamiast makra powiodło się lub nie powiodło się
To ostrzeżenie wskazuje, że HRESULT jest porównywane z liczbą całkowitą, innych niż zero.Sukces w HRESULT (S_OK) jest reprezentowana przez wartość 0.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.Często jest spowodowane przez błędnie Oczekiwano funkcji zwracają integer, jeżeli faktycznie zwraca HRESULT.
Przykład
Poniższy kod generuje ostrzeżenie, porównując HRESULT przeciwko wartość całkowitą:
#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;
}
}
Aby skorygować to ostrzeżenie, następujący kod używa FAILED makro:
#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;
}
}
W przypadku tego ostrzeżenia, SCODE typu jest równoważne z HRESULT.
Aby uzyskać więcej informacji, zobacz Makro pomyślnie i nie powiodło się makro.