Udostępnij za pośrednictwem


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.