C6215
avertissement C6215 : cast entre types d'entiers sémantiquement différents : type Boolean vers HRESULT
Cet avertissement indique que le cast d'un type Boolean est effectué vers HRESULT. Les types Boolean indiquent une opération réussie par une valeur différente de zéro, alors qu'un résultat réussi (S_OK) dans HRESULT est indiqué par une valeur égale à 0. Effectuer un cast d'un type Boolean en HRESULT, puis l'utiliser dans une expression de test produira un résultat incorrect.
Cet avertissement se produit fréquemment lorsqu'un type Boolean est utilisé comme argument dans une macro SUCCEEDED ou FAILED, qui effectue un cast explicite de leurs arguments vers 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 6215
{
// success code ...
}
else
{
// failure code ...
}
}
En général, la macro SUCCEEDED ou FAILED doit uniquement être appliquée à 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 Macro SUCCEEDED et Macro FAILED (pages éventuellement en anglais).