Warnung C6214
Umwandlung zwischen semantisch unterschiedlichen ganzzahligen Typen: HRESULT in einen booleschen Typ
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.
Hinweise
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.
Codeanalysename: CAST_HRESULT_TO_BOOL
Beispiel
Der folgende Code generiert warnung C6214:
#include <windows.h>
BOOL f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if ((BOOL)hr) // warning C6214
{
// 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 den folgenden Artikeln:
Verwenden Sie die Mechanismen, die von der C++-Standardbibliothek (STL) bereitgestellt werden, um die moderne C++-Speicherzuweisungsmethode zu verwenden. Dazu gehören shared_ptr
, , unique_ptr
und Container wie vector
. Weitere Informationen finden Sie unter Intelligente Zeiger und C++-Standardbibliothek.