C6221

Aktualisiert: November 2007

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 Erfolg in HRESULT (S_OK) wird durch 0 (null) dargestellt. Daher generiert eine implizite Umwandlung eines HRESULT in eine ganze Zahl einen unzulässigen Wert und kann zum falschen Ergebnis führen. 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 wird 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.

Siehe auch

Weitere Ressourcen

SUCCEEDED

FAILED