Sdílet prostřednictvím


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.