C6221
C6221
Warnung C6221: Implizite Umwandlung zwischen semantisch unterschiedlichen Integer-Typen: HRESULT wird mit einer ganzen Zahl verglichen. Verwenden Sie stattdessen das Makro SUCCEEDED oder FAILED.
Diese Warnung gibt an, dass ein HRESULT
mit einer ganzen Zahl ungleich 0 (null) verglichen wird. Ein Erfolg in HRESULT
(S_OK
) wird durch 0 (null) dargestellt. Daher generiert eine implizite Umwandlung eines HRESULT
in eine ganze Zahl einen unzulässigen Wert und kann zum falschen Ergebnis führen. Grund hierfür ist oftmals, dass von einer Funktion erwartet wird, dass sie eine ganze Zahl zurückgibt, sie tatsächlich aber ein HRESULT
zurückgibt.
Beispiel
Im folgenden Code wird diese Warnung durch den Vergleich von HRESULT
mit einem ganzzahligen Wert generiert:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == 4)
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
Um diese Warnung zu korrigieren, wird im folgenden Code wird das FAILED
-Makro verwendet:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
Bei dieser Warnung entspricht der SCODE
-Typ HRESULT
.