Freigeben über


Warnung C6220

Implizite Umwandlung zwischen semantisch unterschiedlichen ganzzahligen Typen: Vergleich von HRESULT mit -1. Erwägen Sie stattdessen die Verwendung oder FAILED das SUCCEEDED Makro.

Diese Warnung weist darauf hin, dass ein HRESULT Wert mit einem expliziten, nicht-WertHRESULT von -1 verglichen wird, der kein wohlgeformt HRESULTist.

Hinweise

Ein Fehler in HRESULT (E_FAIL) wird nicht durch ein -1 dargestellt. Daher führt die implizite Umwandlung von HRESULT in eine ganze Zahl zu einen falschen Wert und wahrscheinlich zu einem falschen Ergebnis.

Codeanalysename: COMPARING_HRESULT_TO_MINUS_ONE

Beispiel

In den meisten Fällen wird die Warnung C6220 durch Code verursacht, der versehentlich erwartet, dass eine Funktion eine ganze Zahl zurückgibt, und die Verwendung von -1 als Fehlerwert, sondern die Funktion gibt eine HRESULT. 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 ist am besten, das Makro oder das SUCCEEDEDFAILED Makro zu verwenden, um den Wert eines .HRESULT 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. Verwenden Sie andernfalls die SUCCEEDED Makros.FAILED

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

Die Verwendung und mallocfree (und verwandte APIs für die dynamische Speicherzuweisung) hat viele Fallstricke in Bezug auf Speicherlecks und Ausnahmen. Um diese Arten potenzieller Lecks vollständig zu vermeiden, verwenden Sie die Mechanismen, die von der C++-Standardbibliothek (STL) bereitgestellt werden. Dazu gehören shared_ptr, , unique_ptrund Container wie vector. Weitere Informationen finden Sie unter Intelligente Zeiger und C++-Standardbibliothek.