C6216
Aktualisiert: November 2007
C6216
Warnung C6216: Vom Compiler eingefügte Umwandlung zwischen semantisch unterschiedlichen Integer-Typen: Boolean in HRESULT
Diese Warnung gibt an, dass ein boolescher Typ ohne explizite Umwandlung als HRESULT verwendet wird. Boolesche Typen geben bei Erfolg einen Wert ungleich 0 (null) zurück, HRESULT-Typen geben bei Erfolg (S_OK) den Wert 0 (null) zurück. Der typische Fehlerwert bei Funktionen, die den booleschen Wert false zurückgeben, besteht in einem Erfolgsstatus bei der Auswertung als HRESULT. Dies kann zu falschen Ergebnissen führen.
Beispiel
Der folgende Code generiert diese Warnung:
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
HRESULT f( REFGUID riid1, REFGUID riid2 )
{
// code ...
return IsEqual(riid1, riid2);
}
So korrigieren Sie die Warnung unter Verwendung des folgenden Codes
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
HRESULT f( REFGUID riid1, REFGUID riid2 )
{
if (IsEqual(riid1, riid2) == TRUE)
{
// code ...
return S_OK;
}
else
{
// code ...
return E_FAIL;
}
}
Bei dieser Warnung entspricht der SCODE-Typ HRESULT.