Udostępnij za pośrednictwem


C6214

Ostrzeżenie C6214: rzutowanie pomiędzy różnymi semantycznie typami całkowitymi: HRESULT na typ Boolean

To ostrzeżenie wskazuje, że HRESULT jest rzutowany na typ Boolean.Wartość sukcesu (S_OK) z HRESULT jest równa 0.Jednakże 0, wskazuje błąd dla typu Boolean.Rzutowanie HRESULT na typ Boolean i następnie użycie w wyrażeniu testowym dla niepoprawny wynik.Czasami to ostrzeżenie występuje, jeśli HRESULT jest przechowywany w zmiennej typu Boolean.Każde porównanie, które używa zmiennej typu Boolean do testowania sukcesu lub niepowodzenia HRESULT może prowadzić do niepoprawnych wyników.

Przykład

Poniższy kod generuje to ostrzeżenie:

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  if ((BOOL)hr) // warning 6214
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

Aby poprawić to ostrzeżenie, należy użyć następującego kodu:

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  hr = CoGetMalloc(1, &pMalloc);
  if (SUCCEEDED(hr)) 
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

W przypadku tego ostrzeżenia typ SCODE jest równoważny z HRESULT.

Zazwyczaj makro SUCCEEDED lub FAILED powinno być używane do testowania wartości HRESULT.

Aby uzyskać więcej informacji, zobacz jeden z następujących tematów:

SUCCEEDED

FAILED