Freigeben über


Warnung C6226

Implizite Umwandlung zwischen semantisch unterschiedlichen ganzzahligen Typen: Zuweisen von -1 zu HRESULT. Verwenden Sie stattdessen E_FAIL.

Diese Warnung gibt an, dass einem expliziten Wert von -1 ein HRESULT Wert zugewiesen oder initialisiert wird.

Hinweise

Diese Warnung wird häufig durch eine Verwechslung von ganzzahligen und HRESULT-Typen verursacht. Verwenden Sie zum Angeben des Erfolgs stattdessen die symbolische Konstante S_OK . Verwenden Sie zum Angeben eines Fehlers die symbolischen Konstanten, die mit E_konstant beginnen, z E_FAIL. B. .

Weitere Informationen finden Sie unter den Makros und FAILED den SUCCEEDED Makros.

Codeanalysename: ASSIGNING_MINUS_ONE_TO_HRESULT

Beispiel

Der folgende Code generiert diese Warnung:

#include <windows.h>

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  if (FAILED(CoGetMalloc(1, &pMalloc)))
  {
    hr = -1;
    // code ...
  }
  else
  {
    // code ...
  }
}

So korrigieren Sie die Warnung unter Verwendung des folgenden Codes

#include <windows.h>

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  if (FAILED(CoGetMalloc(1, &pMalloc)))
  {
    hr = E_FAIL;
    // 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.