C6214

avertissement C6214 : cast entre types d'entiers sémantiquement différents : HRESULT vers un type Boolean

Cet avertissement indique qu'un HRESULT est casté à un type booléen.La valeur de réussite (S_OK) d'un HRESULT est égale à 0.Toutefois, la valeur 0 indique un échec pour un type Boolean.Effectuer un cast d'un HRESULT en un type booléen, puis l'utiliser dans une expression de test produira un résultat incorrect.Parfois, cet avertissement se produit lorsqu'un HRESULT est stocké dans une variable booléenne.Toute comparaison qui utilise la variable booléenne pour tester le succès ou l'échec de HRESULT pourrait produire des résultats incorrects.

Exemple

Le code suivant génère cet avertissement :

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  if ((BOOL)hr) // warning 6214
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

Pour corriger cet avertissement, utilisez le code suivant :

#include <windows.h>

BOOL f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;

  hr = CoGetMalloc(1, &pMalloc);
  if (SUCCEEDED(hr)) 
  {
    // success code ...
    return TRUE;
  }
  else
  {
    // failure code ...
    return FALSE;
  }
}

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

Généralement, la macro SUCCEEDED ou FAILED doit être utilisée pour tester la valeur d'un HRESULT.

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

REUSSI

ECHOUE

Pour tirer parti au mieux de la méthodologie moderne d'allocation de mémoire C++, utilisez les mécanismes fournis par la bibliothèque de modèles standard C++ (STL).Ceux-ci incluent shared_ptr, unique_ptr, et vector.Pour plus d’informations, consultez Pointeurs intelligents (Modern C++) et Référence de bibliothèque standard C++.