Avertissement C6216

Cast inséré par le compilateur entre des types intégraux sémantiquement différents : un type booléen en HRESULT

Un type booléen est utilisé comme un HRESULT cast explicite.

Notes

Les types booléens indiquent la réussite par une valeur non nulle ; réussite (S_OK) dans HRESULT est indiqué par une valeur de 0. Valeur booléenne false utilisée comme HRESULT une indication S_OK, qui est fréquemment une erreur.

Nom de l’analyse du code : COMPILER_INSERTED_CAST_BOOL_TO_HRESULT

Exemple

Le code suivant génère cet avertissement :

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

HRESULT f( REFGUID riid1, REFGUID riid2 )
{
  // Oops, f() should return S_OK when the values are equal but will
  // return E_FAIL instead because IsEqual returns a c-style boolean values TRUE or FALSE
  return IsEqual(riid1, riid2);
}

Pour corriger cet avertissement, ajoutez la conversion appropriée entre les deux types ou ajoutez un cast explicite.

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

HRESULT f( REFGUID riid1, REFGUID riid2 )
{
  // converting because IsEqual returns a c-style TRUE or FALSE
  return IsEqual(riid1, riid2) ? S_OK : E_FAIL;
}

Pour cet avertissement, le SCODE type est équivalent à HRESULT.

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