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_OK
wird, 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.