Avertissement C6225

Conversion implicite entre des types entiers sémantiquement différents : affectation de 1 ou TRUE à HRESULT. Envisagez plutôt d’utiliser S_FALSE

Cet avertissement indique qu’un HRESULT objet est affecté ou initialisé avec une valeur de 1 explicite. Les types booléens indiquent la réussite par une valeur non nulle ; réussite (S_OK) dans HRESULT est indiqué par une valeur de 0.

Notes

Cet avertissement est fréquemment dû à une confusion accidentelle des types booléens.HRESULT Pour indiquer la réussite, la constante S_OK symbolique doit être utilisée.

Nom de l’analyse du code : ASSIGNING_ONE_TO_HRESULT

Exemple

Dans le code suivant, l’affectation de HRESULT l’avertissement C6225 génère :

#include <windows.h>

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  if (SUCCEEDED(CoGetMalloc(1, &pMalloc)))
  {
    hr = S_OK;
  }
  else
  {
    hr = 1;
  }
}

Pour corriger cet avertissement, utilisez le code suivant :

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  if (SUCCEEDED(CoGetMalloc(1, &pMalloc)))
  {
    hr = S_OK;
  }
  else
  {
    hr = S_FALSE;
  }
}

Pour cet avertissement, le SCODE type est équivalent à HRESULT.

Pour indiquer l’échec, E_FAILou une autre constante, doit être utilisée.

Pour plus d’informations, consultez l’un des articles suivants :

SUCCEEDED

FAILED

Pour utiliser la méthodologie d’allocation de mémoire C++ moderne, utilisez les mécanismes fournis par la bibliothèque standard C++ (STL). Ceux-ci incluent shared_ptr, unique_ptret des conteneurs tels que vector. Pour plus d’informations, consultez Les pointeurs intelligents et la bibliothèque standard C++.