C6217C6217

avertissement C6217 : cast implicite entre types d’entiers sémantiquement différents : test de HRESULT avec 'not'.warning C6217: Implicit cast between semantically different integer types: testing HRESULT with 'not'. Envisagez d’utiliser SUCCEEDED ou échec macro à la place.Consider using SUCCEEDED or FAILED macro instead.

Cet avertissement indique qu’un HRESULT est testé avec not (!) opérateur.This warning indicates that an HRESULT is being tested with the not (!) operator. Un succès (S_OK) dans HRESULT est indiqué par la valeur 0.A success (S_OK) in HRESULT is indicated by a value of 0. Toutefois, 0 indique un échec pour un type booléen.However, 0 indicates failure for a Boolean type. Test HRESULT avec not opérateur (!) pour déterminer quel code de bloc à exécuter peut provoquer suivent le chemin de code est incorrect.Testing HRESULT with the not operator (!) to determine which code block to run can cause following the wrong code path. Cela entraîne des résultats indésirables.This will lead to unwanted results.

ExempleExample

Le code suivant génère cet avertissement car pas opérateur est utilisé pour déterminer la réussite ou l’échec d’une HRESULT valeur.The following code generates this warning because the not operator is used to determine success or failure of an HRESULT value. Dans ce cas, le chemin d’accès du code incorrect est exécutée, car ( !hr ) s’exécute le code d’échec :In this case, wrong code path is executed because ( !hr ) runs the failure code:

#include <windows.h>
#include <objbase.h>

void f( )
{
  HRESULT hr = CoInitialize(NULL);
  if (!hr)
  {
    // failure code ...
  }
  else
  {
    // success code ...
  }
}

Pour corriger cet avertissement, le code suivant utilise FAILED macro pour rechercher une défaillance :To correct this warning, the following code uses FAILED macro to look for failure:

#include <windows.h>
#include <objbase.h>

void f( )
{
  HRESULT hr = CoInitialize(NULL);
  if (FAILED(hr))
  {
    // failure code ...
  }
  else
  {
    // success code ...
  }
}

Cet avertissement, le SCODE type est équivalent à HRESULT.For this warning, the SCODE type is equivalent to HRESULT.

La valeur de réussite standard de HRESULT (S_OK) est false lorsqu’il est testé en tant que valeur booléenne.The typical success value of HRESULT (S_OK) is false when it is tested as a Boolean.

Pour vérifier si HRESULT est un succès, utilisez la SUCCEEDED macro à la place.To verify whether HRESULT is a success, use the SUCCEEDED macro instead.