C6217
upozornění C6217: implicitní přetypování mezi celé sémanticky různé typy: HRESULT testování s "Ne".Zvažte použití proběhlo úspěšně nebo se nezdařilo makro místo.
Toto upozornění znamená, že HRESULT je testovaný není (!) operátor.Úspěch (S_OK) v HRESULT je označena hodnotou 0.Však 0 označuje selhání typu Boolean.Testování HRESULT s není operátor (!) k určení, který kód může způsobit blokovat spuštění po cestě chybný kód.To povede k nežádoucí výsledky.
Příklad
Následující kód vygeneruje tato upozornění, protože není operátor slouží k určení úspěch nebo selhání HRESULT hodnotu.V tomto případě provést chybný kód cesty, protože ( !hr ) spustí kód chyby:
#include <windows.h>
#include <objbase.h>
void f( )
{
HRESULT hr = CoInitialize(NULL);
if (!hr)
{
// failure code ...
}
else
{
// success code ...
}
}
Chcete-li opravit toto upozornění následující kód používá FAILED makro hledat chyby:
#include <windows.h>
#include <objbase.h>
void f( )
{
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr))
{
// failure code ...
}
else
{
// success code ...
}
}
Pro toto upozornění SCODE typu je ekvivalentní HRESULT.
Typické úspěch hodnotu HRESULT (S_OK) je false při testování jako logická hodnota.
Ověřte, zda HRESULT je úspěch, použití SUCCEEDED makro místo.