C6220
Avertissement C6220 : Cast implicite entre types d'entiers sémantiquement différents : comparaison de HRESULT à -1.Si possible, utilisez plutôt la macro SUCCEEDED ou FAILED.
Cet avertissement indique que HRESULT est comparé à une valeur explicite autre que HRESULT égale à -1, qui n'est pas un HRESULT de forme correcte.Un échec dans HRESULT (E_FAIL) n'est pas représenté par la valeur -1.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.
Exemple
Dans la plupart des cas, cet avertissement est provoqué par le code qui s'attend par erreur à ce qu'une fonction qui doit retourner HRESULT retourne à la place un entier, en utilisant la valeur -1 comme valeur d'échec.L'exemple de code suivant génère cet avertissement :
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == -1)
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
Il est préférable d'utiliser la macro SUCCEEDED ou FAILED pour tester la valeur de HRESULT.Pour corriger cet avertissement, utilisez le code suivant :
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
Pour cet avertissement, le type SCODE équivaut à HRESULT.
La comparaison explicite est appropriée pour vérifier des valeurs HRESULT spécifiques, par exemple E_FAIL.Sinon, utilisez la macro SUCCEEDED ou FAILED.
Pour plus d'informations, consultez SUCCEEDED, macro et FAILED, macro.