C6220C6220

avertissement C6220 - cast implicite entre types d’entiers sémantiquement différents : comparaison de HRESULT à -1.warning C6220 - Implicit cast between semantically different integer types: comparing HRESULT to -1. Utilisez plutôt la macro SUCCEEDED ou FAILEDConsider using SUCCEEDED or FAILED macro instead

Cet avertissement indique qu’un HRESULT est comparée explicite, non -HRESULT la valeur -1, ce qui n’est pas bien formé HRESULT.This warning indicates that an HRESULT is being compared with an explicit, non-HRESULT value of -1, which is not a well-formed HRESULT. Une défaillance dans HRESULT (E_FAIL) n’est pas représenté par une valeur -1.A failure in HRESULT (E_FAIL) is not represented by a -1. 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.

ExempleExample

Dans la plupart des cas, cet avertissement est provoqué par le code qui s’attend qu’une fonction qui doit retourner un HRESULT retourne à la place d’un entier, à l’aide de -1 comme valeur d’échec.In most cases, this warning is caused by the code mistakenly expecting that a function that should return an HRESULT instead returns an integer, by using -1 as a failure value. L’exemple de code suivant génère cet avertissement :The following code sample generates this warning:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

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

Il est préférable d’utiliser le SUCCEEDED ou FAILED macro pour tester la valeur d’un HRESULT.It is best to use the SUCCEEDED or FAILED macro to test the value of an HRESULT. Pour corriger cet avertissement, utilisez le code suivant :To correct this warning, use the following code:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

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

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

La comparaison explicite est appropriée pour vérifier des spécifique HRESULT des valeurs, tel que E_FAIL.Explicit comparison is appropriate to check for specific HRESULT values, such as, E_FAIL. Sinon, utilisez le SUCCEEDED ou FAILED macros.Otherwise, use the SUCCEEDED or FAILED macros.

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.