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: