Udostępnij za pośrednictwem


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.