Freigeben über


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 zeigen Erfolg durch einen Wert ungleich 0 (null) an. Ein Erfolgswert (S_OK) im HRESULT wird hingegen durch den Wert 0 (null) angezeigt.Wird ein boolescher Typ in ein HRESULT umgewandelt und dieses 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
  }
}

Weitere Informationen finden Sie unter SUCCEEDED-Makro und FAILED-Makro