Freigeben über


Warnung C6214

Umwandlung zwischen semantisch unterschiedlichen ganzzahligen Typen: HRESULT in einen booleschen Typ

Diese Warnung gibt an, dass ein HRESULT in einen booleschen Typ umgewandelt wird. Der Erfolgswert von (S_OK) für ein HRESULT ist gleich 0. 0 gibt bei einem booleschen Typ jedoch einen Fehler an. Wird ein HRESULT in einen booleschen Typ umgewandelt und dieser Typ anschließend in einem Testausdruck verwendet, führt dies zu einem fehlerhaften Ergebnis.

Hinweise

Manchmal wird diese Warnung ausgegeben, wenn ein HRESULT in einer booleschen Variablen gespeichert wird. Jeglicher Vergleich, bei dem mit der booleschen Variablen HRESULT auf Erfolg oder Fehler getestet wird, kann zu fehlerhaften Ergebnissen führen.

Codeanalysename: CAST_HRESULT_TO_BOOL

Beispiel

Der folgende Code generiert warnung C6214:

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  if ((BOOL)hr) // warning C6214
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

So korrigieren Sie die Warnung unter Verwendung des folgenden Codes

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  hr = CoGetMalloc(1, &pMalloc);
  if (SUCCEEDED(hr))
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

Bei dieser Warnung entspricht der SCODE-Typ HRESULT.

In der Regel wird das SUCCEEDED-Makro oder das FAILED-Makro verwendet, um den Wert eines HRESULT zu testen.

Weitere Informationen finden Sie in den folgenden Artikeln:

SUCCEEDED

FAILED

Verwenden Sie die Mechanismen, die von der C++-Standardbibliothek (STL) bereitgestellt werden, um die moderne C++-Speicherzuweisungsmethode zu verwenden. Dazu gehören shared_ptr, , unique_ptrund Container wie vector. Weitere Informationen finden Sie unter Intelligente Zeiger und C++-Standardbibliothek.