Freigeben über


C6215

C6215

Warnung C6215: Umwandlung zwischen semantisch unterschiedlichen Integer-Typen: Boolean in HRESULT

Diese Warnung gibt an, dass ein boolescher Typ in einen HRESULT-Typ umgewandelt wird. Boolesche Typen geben bei Erfolg einen Wert ungleich 0 (null) zurück, wohingegen HRESULT-Typen bei Erfolg (S_OK) 0 (null) zurückgeben. Wird ein boolescher Typ in ein HRESULT umgewandelt und anschließend in einem Testausdruck verwendet, führt dies zu einem fehlerhaften Ergebnis.

Diese Warnung wird häufig generiert, wenn ein boolescher Typ als Argument für das SUCCEEDED-Makro oder das FAILED-Makro verwendet wird, deren Argumente explizit in ein HRESULT umgewandelt werden.

Beispiel

Der folgende Code generiert diese Warnung:

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

void f( REFGUID riid1, REFGUID riid2 )
{
  if (SUCCEEDED( IsEqual( riid1, riid2 ) )) //warning 6215
  {
    // success code ...
  }
  else
  {
    // failure code ...
  }
}

Grundsätzlich sollte das SUCCEEDED-Makro oder das FAILED-Makro nur auf HRESULT angewendet werden.

So korrigieren Sie die Warnung unter Verwendung des folgenden Codes

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

void f( REFGUID riid1, REFGUID riid2 )
{
  if (IsEqual( riid1, riid2 ) == TRUE) 
  {
    // code for riid1 == riid2
  }
  else
  {
    // code for riid1 != riid2
  }
}

Siehe auch

Referenz

SUCCEEDED-Makro
FAILED-Makro
HRESULT