Warnung C6215
Umwandlung zwischen semantisch unterschiedlichen ganzzahligen Typen: boolescher Typ in HRESULT
Diese Warnung gibt an, dass ein boolescher Wert in eine HRESULT
. Boolesche Typen deuten auf Erfolg durch einen Wert ungleich Null hin, während der Erfolg (S_OK
) HRESULT
durch den Wert 0 angegeben wird. Das Umwandeln eines booleschen Typs in einen HRESULT
Und dann in einem Testausdruck führt zu einem falschen Ergebnis.
Hinweise
Diese Warnung tritt häufig auf, wenn ein boolescher Wert als Argument oder SUCCEEDED
FAILED
Makro verwendet wird, das seine Argumente explizit in ein HRESULT
.
Codeanalysename: CAST_BOOL_TO_HRESULT
Beispiel
Der folgende Code generiert diese Warnung:
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
void f( REFGUID riid1, REFGUID riid2 )
{
if (SUCCEEDED( IsEqual( riid1, riid2 ) )) //warning C6215
{
// success code ...
}
else
{
// failure code ...
}
}
Im Allgemeinen sollten die SUCCEEDED
Makros FAILED
nur auf HRESULT
.
So korrigieren Sie die Warnung unter Verwendung des folgenden Codes
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
void f( REFGUID riid1, REFGUID riid2 )
{
if (IsEqual( riid1, riid2 ) == TRUE)
{
// code for riid1 == riid2
}
else
{
// code for riid1 != riid2
}
}
Weitere Informationen finden Sie unter ERFOLGREICHen Makros und FAILED-Makro