Freigeben über


Warnung C6216

Compiler eingefügte Umwandlung zwischen semantisch unterschiedlichen integralen Typen: boolescher Typ in HRESULT

Ein boolescher Typ wird als eine HRESULT ohne explizite Umwandlung verwendet.

Hinweise

Bei booleschen Typen wird Erfolg durch einen Wert ungleich 0 (null) angegeben. Erfolg (S_OK) in HRESULT wird durch den Wert 0 (null) angezeigt. Ein boolescher false Wert, der als ein HRESULT Hinweis verwendet S_OKwird, was häufig ein Fehler ist.

Codeanalysename: COMPILER_INSERTED_CAST_BOOL_TO_HRESULT

Beispiel

Der folgende Code generiert diese Warnung:

#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);

HRESULT f( REFGUID riid1, REFGUID riid2 )
{
  // Oops, f() should return S_OK when the values are equal but will
  // return E_FAIL instead because IsEqual returns a c-style boolean values TRUE or FALSE
  return IsEqual(riid1, riid2);
}

Um diese Warnung zu korrigieren, fügen Sie entweder die entsprechende Konvertierung zwischen den beiden Typen hinzu, oder fügen Sie eine explizite Umwandlung hinzu.

#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);

HRESULT f( REFGUID riid1, REFGUID riid2 )
{
  // converting because IsEqual returns a c-style TRUE or FALSE
  return IsEqual(riid1, riid2) ? S_OK : E_FAIL;
}

Bei dieser Warnung entspricht der SCODE-Typ HRESULT.

Weitere Informationen finden Sie unter SUCCEEDED-Makro und FAILED-Makro.