Freigeben über


C6219

Warnung C6219: Implizite Umwandlung zwischen semantisch unterschiedlichen Integer-Typen: HRESULT wird mit 1 oder TRUE verglichen. Stattdessen sollten Sie möglicherweise das SUCCEEDED- oder FAILED-Makro verwenden.

Diese Warnung gibt an, dass ein HRESULT mit einem expliziten Wert von 1 verglichen wird, der kein HRESULT ist. Dies kann zu falschen Ergebnissen führen, da der typische Erfolgswert von HRESULT (S_OK) 0 ist; bei einem Vergleich mit einem Boolean-Typ wird er implizit in false umgewandelt.

Beispiel

Der folgende Code generiert diese Warnung, weil CoGetMalloc ein HRESULT zurückgibt, das dann mit TRUE verglichen wird:

#include <windows.h>

void f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  
  if (hr == TRUE)
  {
    // success code ...
  }
  else
  {
    // failure code   
  }
}

Meistens wird die Warnung durch Code verursacht, der fälschlicherweise ein HRESULT mit einem Boolean-Typ vergleicht. Es empfiehlt sich, das SUCCEEDED-Makro oder das FAILED-Makro zum Testen des Werts eines HRESULT zu verwenden. So korrigieren Sie die Warnung unter Verwendung des folgenden Codes

#include <windows.h>

void f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  
  if (SUCCEEDED(hr))
  {
    // success code ...
  }
  else
  {
    // failure code   
  }
}

Bei dieser Warnung entspricht der SCODE-Typ HRESULT.