Sdílet prostřednictvím


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.