C6230
Ostrzeżenie C6230: niejawna cast między całkowitą semantycznie różnych typów: przy użyciu HRESULT w kontekście logiczna
To ostrzeżenie wskazuje, że bare HRESULT jest używana w kontekście, takich jak if instrukcji, gdzie jest oczekiwany wynik będący wartością logiczną.Jest to prawdopodobnie dają niewłaściwe wyniki.Na przykład, wartość sukces typowe dla HRESULT (S_OK) ma wartość false, gdy jest badany jako wartość logiczna.
Przykład
Poniższy kod generuje ostrzeżenie to:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (hr)
{
// code ...
}
else
{
// code ...
}
}
W większości sytuacji udało się lub nie powiodło się makro powinno być używane do testowania wartości HRESULT.Aby poprawić to ostrzeżenie, należy użyć następującego kodu:
#include <windows.h>
VOID f( )
{
LPMALLOC pMalloc;
HRESULT hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// code ...
}
else
{
// code ...
}
}
W przypadku tego ostrzeżenia, SCODE typu jest równoważne z HRESULT.