C6225
C6225
Warnung C6225: Implizite Umwandlung zwischen semantisch unterschiedlichen Integer-Typen: HRESULT wird 1 oder TRUE zugewiesen. Verwenden Sie stattdessen S_FALSE.
Diese Warnung weist darauf hin, dass einem HRESULT
der Wert einer expliziten 1 zugewiesen oder es damit initialisiert wird. Boolesche Typen geben bei Erfolg einen Wert ungleich 0 (null) zurück, wohingegen HRESULT
-Typen bei Erfolg (S_OK
) 0 (null) zurückgeben. Diese Warnung wird häufig durch eine Verwechslung von booleschen und HRESULT
-Typen verursacht. Um bei Erfolg einen Wert anzugeben, sollte die symbolische Konstante S_OK
verwendet werden.
Beispiel
Im folgenden Code wird durch Zuweisung von HRESULT
diese Warnung generiert:
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (SUCCEEDED(CoGetMalloc(1, &pMalloc)))
{
// code ...
hr = S_OK;
}
else
{
// code ...
hr = 1;
}
}
So korrigieren Sie die Warnung unter Verwendung des folgenden Codes
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (SUCCEEDED(CoGetMalloc(1, &pMalloc)))
{
hr = S_OK;
// code ...
}
else
{
hr = S_FALSE;
// code ...
}
}
Bei dieser Warnung entspricht der SCODE
-Typ HRESULT
.
Um das Fehlschlagen anzugeben, sollte E_FAIL
oder eine andere Konstante verwendet werden.