Condividi tramite


Avviso C6215

Eseguire il cast tra tipi integer semanticamente diversi: un tipo booleano a HRESULT

Questo avviso indica che viene eseguito il cast di un valore booleano a un oggetto HRESULT. I tipi booleani indicano l'esito positivo da un valore diverso da zero, mentre l'esito positivo (S_OK) in HRESULT è indicato da un valore pari a 0. Eseguire il cast di un tipo booleano in un oggetto HRESULT e quindi usarlo in un'espressione di test restituirà un risultato non corretto.

Osservazioni:

Questo avviso si verifica spesso quando un valore booleano viene utilizzato come argomento a SUCCEEDED o FAILED macro, che esegue il cast esplicito dei relativi argomenti a un oggetto HRESULT.

Nome dell'analisi del codice: CAST_BOOL_TO_HRESULT

Esempio

Il codice seguente genera questo avviso:

#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);

void f( REFGUID riid1, REFGUID riid2 )
{
  if (SUCCEEDED( IsEqual( riid1, riid2 ) )) //warning C6215
  {
    // success code ...
  }
  else
  {
    // failure code ...
  }
}

In genere, le SUCCEEDED macro o FAILED devono essere applicate solo a HRESULT.

Per correggere questo avviso, usare il codice seguente:

#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);

void f( REFGUID riid1, REFGUID riid2 )
{
  if (IsEqual( riid1, riid2 ) == TRUE)
  {
    // code for riid1 == riid2
  }
  else
  {
    // code for riid1 != riid2
  }
}

Per altre informazioni, vedere Macro SUCC edizione Enterprise DED e macro FAILED