Freigeben über


Warnung C6230

Implizite Umwandlung zwischen semantisch unterschiedlichen ganzzahligen Typen: Verwenden von HRESULT in einem booleschen Kontext

Hinweise

Diese Warnung gibt an, dass eine Bare HRESULT in einem Kontext verwendet wird, in dem ein boolesches Ergebnis erwartet wird, z. B. eine if Anweisung. Dieser Test führt wahrscheinlich zu falschen Ergebnissen. Beispielsweise ist der typische Erfolgswert für HRESULT (S_OK) falsch, wenn er als boolescher Wert getestet wird.

Codeanalysename: USING_HRESULT_IN_BOOLEAN_CONTEXT

Beispiel

Der folgende Code generiert diese Warnung:

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);

  if (hr)
  {
    // code ...
  }
  else
  {
    // code ...
  }
}

In den meisten Fällen sollte das MAKRO ERFOLGREICH oder FEHLGESCHLAGEN verwendet werden, um den Wert der HRESULT. So korrigieren Sie die Warnung unter Verwendung des folgenden Codes

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);

  if (SUCCEEDED(hr))
  {
    // code ...
  }
  else
  {
    // code ...
  }
}

Für diese Warnung wird der SCODE Typ als ein HRESULT.

Die Verwendung von malloc und free (und verwandten dynamischen Speicher-APIs) hat viele Fallstricke als Ursache für Speicherverluste und Ausnahmen. Um diese Arten von Lecks und Ausnahmeproblemen zu vermeiden, verwenden Sie den Zeiger und containerklassen, die von der C++-Standardbibliothek bereitgestellt werden. Dazu gehören shared_ptr, unique_ptr und Vektoren. Weitere Informationen finden Sie unter Smart Pointers and C++ Standard Library.