C6219
upozornění C6219: Implicitní přetypování mezi sémanticky rozdílnými celočíselnými typy: porovnávání hodnoty HRESULT s 1 nebo TRUE.Zvažte namísto toho použití makra SUCCEEDED nebo FAILED.
Toto upozornění označuje, že HRESULT je porovnáván s explicitní hodnotou jedna (1), která neodpovídá HRESULT.To může vést k nesprávným výsledkům, protože typická úspěšná návratová hodnota HRESULT (S_OK) je 0. Porovnání této hodnoty s logickou hodnotou ji implicitně převede na hodnotu false.
Příklad
Následující kód vygeneruje toto upozornění, protože funkce CoGetMalloc vrátí HRESULT, která je pak porovnána s hodnotou TRUE:
#include <windows.h>
void f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == TRUE)
{
// success code ...
}
else
{
// failure code
}
}
Většinou je toto upozornění způsobeno nechtěným porovnáváním HRESULT s logickou hodnotou.Obecně je nejvhodnější použít makra SUCCEEDED nebo FAILED makra pro porovnávání hodnot s HRESULT.Pro opravu tohoto upozornění použijte následující kód:
#include <windows.h>
void f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// success code ...
}
else
{
// failure code
}
}
Pro toto upozornění je typ SCODE ekvivalentní s HRESULT.