Avertissement C6226

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

Cet avertissement indique qu’une HRESULT valeur explicite est affectée ou initialisée à -1.

Notes

Cet avertissement est fréquemment provoqué par une confusion accidentelle d’entiers et HRESULT de types. Pour indiquer la réussite, utilisez plutôt la constante S_OK symbolique. Pour indiquer l’échec, utilisez les constantes symboliques qui commencent par E_constant, telles que E_FAIL.

Pour plus d’informations, consultez les macros et FAILED les SUCCEEDED macros.

Nom de l’analyse du code : ASSIGNING_MINUS_ONE_TO_HRESULT

Exemple

Le code suivant génère cet avertissement :

#include <windows.h>

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  if (FAILED(CoGetMalloc(1, &pMalloc)))
  {
    hr = -1;
    // code ...
  }
  else
  {
    // code ...
  }
}

Pour corriger cet avertissement, utilisez le code suivant :

#include <windows.h>

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  if (FAILED(CoGetMalloc(1, &pMalloc)))
  {
    hr = E_FAIL;
    // code ...
  }
  else
  {
    // code ...
  }
}

Pour cet avertissement, le SCODE type est traité comme un HRESULT.

L’utilisation et mallocfree (et les API de mémoire dynamique associées) présente de nombreux pièges comme cause de fuites de mémoire et d’exceptions. Pour éviter ces types de fuites et problèmes d’exception, utilisez les classes de pointeur et de conteneur fournies par la bibliothèque standard C++. Il s’agit notamment de shared_ptr, de unique_ptr et de vecteur. Pour plus d’informations, consultez Smart Pointers and C++ Standard Library.