Freigeben über


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.

Siehe auch

Referenz

SUCCEEDED-Makro
FAILED-Makro
HRESULT