Freigeben über


C6214

Warnung C6214: Umwandlung zwischen semantisch unterschiedlichen Integer-Typen: HRESULT in Boolean

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. 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.

Beispiel

Der folgende Code generiert diese Warnung:

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  if ((BOOL)hr) // warning 6214
  {
    // 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 einem der folgenden Themen:

SUCCEEDED

FAILED