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.