C6216
Mise à jour : novembre 2007
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 le succès par une valeur non nulle, tandis que le succès (S_OK) dans HRESULT est indiqué par la valeur 0. La valeur d'échec classique pour les fonctions qui retournent une valeur Boolean false est un état de succès lorsqu'elle est testée comme 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.