Partager via


C6225

avertissement C6225 : Cast implicite entre types d'entiers sémantiquement différents : assignation de 1 ou TRUE à HRESULT. Si possible, utilisez S_FALSE à la place.

Cet avertissement indique qu'un HRESULT est assigné ou initialisé avec une valeur d'un explicite 1. Les types Boolean indiquent une opération réussie par une valeur différente de zéro ; un résultat réussi (S_OK) dans HRESULT est indiqué par une valeur égale à 0. Cet avertissement est fréquemment généré par confusion accidentelle entre les types Boolean et HRESULT. Pour indiquer le succès, la constante symbolique S_OK doit être utilisée.

Exemple

Dans le code suivant, l'assignation de HRESULT génère cet avertissement :

#include <windows.h>

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

Pour corriger cet avertissement, utilisez le code suivant :

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  if (SUCCEEDED(CoGetMalloc(1, &pMalloc)))
  {
    hr = S_OK;
    // code ...
  }
  else
  {
    hr = S_FALSE;
    // code ...
  }
}

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

Pour indiquer l'échec, E_FAIL, ou une autre constante, doit être utilisée.

Pour plus d'informations, consultez l'une des rubriques suivantes :

SUCCEEDED Macro

FAILED Macro