C6225
Aktualisiert: November 2007
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, HRESULT-Typen geben bei Erfolg (S_OK) 0 (null) zurück. 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.