C6221C6221

avertissement C6221 : cast implicite entre types d’entiers sémantiquement différents : comparaison de HRESULT à un entier.warning C6221: Implicit cast between semantically different integer types: comparing HRESULT to an integer. Envisagez d’utiliser des macros SUCCEEDED ou FAILED à la placeConsider using SUCCEEDED or FAILED macros instead

Cet avertissement indique qu’un HRESULT est comparé à un entier différent de zéro.This warning indicates that an HRESULT is being compared to an integer other than zero. Un succès dans HRESULT (S_OK) est représenté par la valeur 0.A success in HRESULT (S_OK) is represented by a 0. Par conséquent, un cast implicite d’un HRESULT vers un entier générera une valeur incorrecte et est susceptible d’aboutir à un résultat incorrect.Therefore, an implicit cast of an HRESULT to an integer will generate an incorrect value and is likely to lead to the wrong result. Il est souvent provoqué par qui s’attend une fonction retourne un entier lorsqu’elle retourne en fait une HRESULT.It is often caused by mistakenly expecting a function to return an integer when it actually returns an HRESULT.

ExempleExample

Le code suivant génère cet avertissement en comparant HRESULT par rapport à une valeur entière :The following code generates this warning by comparing HRESULT against an integer value:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  hr = CoGetMalloc(1, &pMalloc);
  if (hr == 4)
  {
    // failure code ...
    return S_FALSE;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

Pour corriger cet avertissement, le code suivant utilise la FAILED macro :To correct this warning, the following code uses the FAILED macro:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  hr = CoGetMalloc(1, &pMalloc);
  if (FAILED(hr))
  {
    // failure code ...
    return S_FALSE;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

Pour cet avertissement, la SCODE type équivaut à HRESULT.For this warning, the SCODE type is equivalent to HRESULT.

Pour plus d’informations, consultez Macro SUCCEEDED et Échec de la Macro.For more information, see SUCCEEDED Macro and FAILED Macro.

Notez que l’utilisation de malloc et free (et les API d’allocation de mémoire dynamique connexes) ont de nombreuses pièges en termes de fuites de mémoire et des exceptions.Note that the use of malloc and free (and related dynamic memory allocation APIs) have many pitfalls in terms of memory leaks and exceptions. Pour éviter ces types de fuites et totalement de problèmes d’exception, utilisez les mécanismes fournis par la bibliothèque STL (C++ Standard Template Library).To avoid these kinds of leaks and exception problems altogether, use the mechanisms that are provided by the C++ Standard Template Library (STL). Ceux-ci incluent shared_ptr, unique_ptr, et vecteur.These include shared_ptr, unique_ptr, and vector. Pour plus d’informations, consultez pointeurs intelligents et bibliothèque Standard C++.For more information, see Smart Pointers and C++ Standard Library.