Freigeben über


C6220

Warnung C6220: Implizite Umwandlung zwischen semantisch unterschiedlichen Integer-Typen: HRESULT wird mit -1 verglichen.Verwenden Sie stattdessen das Makro SUCCEEDED oder FAILED.

Diese Warnung gibt an, dass ein HRESULT mit einem expliziten Nicht-HRESULT-Wert von -1 verglichen wird, bei dem es sich nicht um ein wohlgeformtes HRESULT handelt.Ein Fehler in HRESULT (E_FAIL) wird nicht durch -1 dargestellt.Daher führt die implizite Umwandlung von HRESULT in eine ganze Zahl zu einen falschen Wert und wahrscheinlich zu einem falschen Ergebnis.

Beispiel

In den meisten Fällen wird diese Warnung von Code ausgelöst, der fälschlicherweise davon ausgeht, dass eine Funktion, die ein HRESULT zurückgeben sollte, eine ganze Zahl zurückgibt, wobei –1 als Fehlerwert gilt.Im folgenden Code wird diese Warnung generiert:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (hr == -1)
  {
    // failure code ...
    return E_FAIL;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

Es empfiehlt sich, das SUCCEEDED-Makro oder das FAILED-Makro zum Testen des Werts eines HRESULT zu verwenden.So korrigieren Sie die Warnung unter Verwendung des folgenden Codes

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (FAILED(hr))
  {
    // failure code ...
    return E_FAIL;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

Bei dieser Warnung entspricht der SCODE-Typ HRESULT.

Ein expliziter Vergleich eignet sich zum Überprüfen auf bestimmte HRESULT-Werte, z. B. E_FAIL.Andernfalls müssen Sie das SUCCEEDED -Makro oder das FAILED-Makro verwenden.

Weitere Informationen finden Sie unter SUCCEEDED-Makro und FAILED-Makro.