C6214
upozornění C6214: přetypování mezi sémanticky rozdílnými celočíselnými typy: hodnota HRESULT na logický typ
Toto upozornění signalizuje, že HRESULT byl přetypován na typ Boolean.Hodnota úspěchu (S_OK) HRESULT se rovná 0.Nicméně 0 označuje chybu logického typu.Přetypování HRESULT na logický typ a jeho použití ve výrazu testu přinese nesprávný výsledek.V některých případech k tomuto upozornění dochází, když je HRESULT uložen v proměnné typu Boolean.Jakékoli srovnání, které používá logickou proměnnou pro testování úspěchu nebo neúspěchu HRESULT, může vést k nesprávným výsledkům.
Příklad
Následující kód generuje toto upozornění:
#include <windows.h>
BOOL f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if ((BOOL)hr) // warning 6214
{
// success code ...
return TRUE;
}
else
{
// failure code ...
return FALSE;
}
}
Pro opravu tohoto upozornění použijte následující kód:
#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;
}
}
Pro toto upozornění je typ SCODE ekvivalentní k HRESULT.
Makro SUCCEEDED nebo FAILED by mělo být obvykle používáno pro testování hodnot HRESULT.
Další informace naleznete v jednom z následujících témat:
Chcete-li využít moderní metodologie přidělování paměti C++, použijte mechanismy, které jsou k dispozici v knihovně C++ STL.Patří mezi ně shared_ptr, unique_ptr a vector.Další informace naleznete v tématu Chytré ukazatele (moderní verze jazyka C++) a Standardní knihovna C++ – referenční dokumentace.