Partager via


C6219

avertissement C6219 : cast implicite entre types d'entiers sémantiquement différents : comparaison de HRESULT à 1 ou TRUE.Si possible, utilisez plutôt la macro SUCCEEDED (page éventuellement en anglais) ou FAILED (page éventuellement en anglais)

Cet avertissement indique que HRESULT est comparé avec une valeur explicite autre que HRESULT qui est égale à un (1).Cela risque de générer des résultats incorrects car la valeur de réussite standard de HRESULT (S_OK) est 0 ; la comparaison avec un type booléen la convertit implicitement en False.

Exemple

Le code suivant génère cet avertissement car CoGetMalloc retourne HRESULT, qui est ensuite comparé à TRUE :

#include <windows.h>

void f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  
  if (hr == TRUE)
  {
    // success code ...
  }
  else
  {
    // failure code   
  }
}

Cet avertissement est souvent provoqué par le code qui teste par erreur HRESULT par rapport à un type Boolean.Il est généralement préférable d'utiliser les macros SUCCEEDED ou FAILED pour tester la valeur de HRESULT.Pour corriger cet avertissement, utilisez le code suivant :

#include <windows.h>

void f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  
  if (SUCCEEDED(hr))
  {
    // success code ...
  }
  else
  {
    // failure code   
  }
}

Pour cet avertissement, le type SCODE équivaut à HRESULT.