C6221
avertissement C6221 : cast implicite entre types d'entiers sémantiquement différents : comparaison de HRESULT à un entier.Si possible, utilisez la macro SUCCEEDED ou FAILED à la place.
Cet avertissement indique que HRESULT est comparé à un entier autre que zéro.Une réussite dans HRESULT (S_OK) est représentée par la valeur 0.Par conséquent, un cast implicite d'un HRESULT vers un entier générera une valeur incorrecte et conduira vraisemblablement à un résultat incorrect.Il est souvent provoqué par le code qui s'attend par erreur à ce qu'une fonction retourne un entier lorsqu'elle retourne en réalité HRESULT.
Exemple
Le code suivant génère cet avertissement en comparant HRESULT à une valeur entière :
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == 4)
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
Pour corriger cet avertissement, le code suivant utilise la macro FAILED :
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
Pour cet avertissement, le type SCODE équivaut à HRESULT.
Pour plus d'informations, consultez SUCCEEDED, macro et FAILED, macro.