Avertissement C6215

Effectuer un cast entre des types entiers sémantiquement différents : un type booléen en HRESULT

Cet avertissement indique qu’un booléen est converti en un HRESULT. Les types booléens indiquent la réussite par une valeur non nulle, tandis que le succès (S_OK) dans HRESULT est indiqué par la valeur 0. La conversion d’un type booléen sur un HRESULT type booléen, puis son utilisation dans une expression de test génère un résultat incorrect.

Notes

Cet avertissement se produit fréquemment lorsqu’un booléen est utilisé comme argument vers SUCCEEDED ou FAILED macro, qui convertit explicitement leurs arguments en un HRESULT.

Nom de l’analyse du code : CAST_BOOL_TO_HRESULT

Exemple

Le code suivant génère cet avertissement :

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

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

En règle générale, les SUCCEEDEDFAILED macros ne doivent être appliquées qu’à HRESULT.

Pour corriger cet avertissement, utilisez le code suivant :

#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
  }
}

Pour plus d’informations, consultez la macro SUCCEEDED et la macro FAILED