C6216
Avertissement C6216 : cast inséré par le compilateur entre types intégraux sémantiquement différents : type Boolean vers HRESULT
Cet avertissement indique qu'un type Boolean est utilisé comme HRESULT sans cast explicite. Les types Boolean indiquent une opération réussie par une valeur différente de zéro ; un résultat réussi (S_OK) dans HRESULT est indiqué par une valeur égale à 0. La valeur de défaillance typique pour les fonctions qui retournent un Boolean faux est un état de réussite lorsqu'il est testé comme un HRESULT. Cette situation risque de générer des résultats incorrects.
Exemple
Le code suivant génère cet avertissement :
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
HRESULT f( REFGUID riid1, REFGUID riid2 )
{
// code ...
return IsEqual(riid1, riid2);
}
Pour corriger cet avertissement, utilisez le code suivant :
#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;
}
}
Pour cet avertissement, le type SCODE équivaut à HRESULT.
Pour plus d'informations, consultez SUCCEEDED, macro et FAILED, macro.