Partager via


C6219

Mise à jour : novembre 2007

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 ou FAILED.

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 succès classique de HRESULT (S_OK)est 0 ; la comparaison avec un type Boolean 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.

Voir aussi

Autres ressources

SUCCEEDED

FAILED