C6230

avertissement C6230 : cast implicite entre types d'entiers sémantiquement différents : utilisation de HRESULT dans un contexte Boolean

Cet avertissement indique qu'un HRESULT nu est utilisé dans un contexte, par exemple l'instruction if , dans lequel un résultat Boolean est attendu.Cette situation risque de générer des résultats incorrects.Par exemple, la valeur de succès classique pour HRESULT (S_OK) est False lorsqu'elle est testée comme un type Boolean.

Exemple

Le code suivant génère cet avertissement :

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);
  
  if (hr)
  {
    
    // code ...
  }
  else
  {
    // code ...
  }
}

Dans la plupart des cas, la macro SUCCEEDED (page éventuellement en anglais) ou FAILED (page éventuellement en anglais) doit être utilisée pour tester la valeur de HRESULT.Pour corriger cet avertissement, utilisez le code suivant :

#include <windows.h>

VOID f( )
{
  LPMALLOC pMalloc;
  HRESULT hr = CoGetMalloc(1, &pMalloc);
  
  if (SUCCEEDED(hr))
  {
    
    // code ...
  }
  else
  {
    // code ...
  }
}

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