C6221
upozornění C6221: implicitní přetypování mezi celé sémanticky různé typy: porovnání HRESULT na celé číslo.Zvažte použití makra byl úspěšný nebo NEÚSPĚŠNÝ místo
Toto upozornění znamená, že HRESULT je porovnávána celé číslo větší než nula.Úspěch v HRESULT (S_OK) je reprezentován 0.Proto implicitní nádech HRESULT na celé generovat nesprávná hodnota a mohou vést k nesprávné výsledky.To je často způsobeno omylem očekává funkce vrátí celočíselnou při skutečně vrátí HRESULT.
Příklad
Následující kód vygeneruje toto upozornění porovnáním HRESULT proti celočíselnou hodnotu:
#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;
}
}
Chcete-li opravit toto upozornění následující kód používá FAILED makro:
#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;
}
}
Pro toto upozornění SCODE typu je ekvivalentní HRESULT.
Další informace naleznete v Bylo úspěšně DOKONČENO makro a se nezdařilo makro.