Freigeben über


C6216

C6216

Warnung C6216: Vom Compiler eingefügte Umwandlung zwischen semantisch unterschiedlichen Integer-Typen: Boolean in HRESULT

Diese Warnung gibt an, dass ein boolescher Typ ohne explizite Umwandlung als HRESULT verwendet wird. Boolesche Typen geben bei Erfolg einen Wert ungleich 0 (null) zurück, wohingegen HRESULT-Typen bei Erfolg (S_OK) den Wert 0 (null) zurückgeben. Der typische Fehlerwert bei Funktionen, die den booleschen Wert false zurückgeben, besteht in einem Erfolgsstatus bei der Auswertung als HRESULT. Dies kann zu unerwünschten Ergebnissen führen.

Beispiel

Der folgende Code generiert diese Warnung:

#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);

HRESULT f( REFGUID riid1, REFGUID riid2 )
{
  // code ...
  return IsEqual(riid1, riid2);  
}

So korrigieren Sie die Warnung unter Verwendung des folgenden Codes

#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);

HRESULT f( REFGUID riid1, REFGUID riid2 )
{
  if (IsEqual(riid1, riid2) == TRUE)
  {
    // code ...
    return S_OK;
  }
  else
  {
    // code ...
    return E_FAIL;
  }
}

Bei dieser Warnung entspricht der SCODE-Typ HRESULT.

Siehe auch

Referenz

HRESULT
SUCCEEDED-Makro
FAILED-Makro