Freigeben über


C6221

Warnung C6221: Implizite Umwandlung zwischen semantisch unterschiedlichen Integer-Typen: HRESULT wird mit einer ganzen Zahl verglichen.Verwenden Sie stattdessen das Makro SUCCEEDED oder FAILED.

Diese Warnung gibt an, dass ein HRESULT mit einer ganzen Zahl ungleich 0 (null) verglichen wird.Ein erfolgreiches HRESULT (S_OK) wird durch eine 0 dargestellt.Daher führt die implizite Umwandlung von HRESULT in eine ganze Zahl zu einen falschen Wert und wahrscheinlich zu einem falschen Ergebnis.Grund hierfür ist oftmals, dass von einer Funktion erwartet wird, dass sie eine ganze Zahl zurückgibt, sie tatsächlich aber ein HRESULT zurückgibt.

Beispiel

Im folgenden Code wird diese Warnung durch den Vergleich von HRESULT mit einem ganzzahligen Wert generiert:

#include <windows.h>

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

Um diese Warnung zu korrigieren, wird im folgenden Code das FAILED-Makro verwendet:

#include <windows.h>

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

Bei dieser Warnung entspricht der SCODE-Typ HRESULT.

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