Sdílet prostřednictvím


C6214

upozornění C6214: přetypování mezi sémanticky rozdílnými celočíselnými typy: hodnota HRESULT na logický typ

Toto upozornění signalizuje, že HRESULT byl přetypován na typ Boolean.Hodnota úspěchu (S_OK) HRESULT se rovná 0.Nicméně 0 označuje chybu logického typu.Přetypování HRESULT na logický typ a jeho použití ve výrazu testu přinese nesprávný výsledek.V některých případech k tomuto upozornění dochází, když je HRESULT uložen v proměnné typu Boolean.Jakékoli srovnání, které používá logickou proměnnou pro testování úspěchu nebo neúspěchu HRESULT, může vést k nesprávným výsledkům.

Příklad

Následující kód generuje toto upozornění:

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  if ((BOOL)hr) // warning 6214
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

Pro opravu tohoto upozornění použijte následující kód:

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  hr = CoGetMalloc(1, &pMalloc);
  if (SUCCEEDED(hr)) 
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

Pro toto upozornění je typ SCODE ekvivalentní k HRESULT.

Makro SUCCEEDED nebo FAILED by mělo být obvykle používáno pro testování hodnot HRESULT.

Další informace naleznete v jednom z následujících témat:

PROBĚHLO ÚSPĚŠNĚ

CHYBA

Chcete-li využít moderní metodologie přidělování paměti C++, použijte mechanismy, které jsou k dispozici v knihovně C++ STL.Patří mezi ně shared_ptr, unique_ptr a vector.Další informace naleznete v tématu Chytré ukazatele (moderní verze jazyka C++) a Standardní knihovna C++ – referenční dokumentace.