Freigeben über


C6214

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 (S_OK) für ein HRESULT entspricht 0 (null). Bei einem booleschen Typ weist 0 (null) jedoch auf einen Fehler hin. 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.

Siehe auch

Referenz

SUCCEEDED-Makro
FAILED-Makro
HRESULT