C6216

avviso C6216: cast inserito dal compilatore tra tipi integer semanticamente diversi: da un tipo Boolean a HRESULT

L'avviso indica che è in uso un Boolean come HRESULT senza che sia stato eseguito il cast esplicito.I tipi boolean indicano l'esito positivo mediante un valore diverso da zero; l'esito positivo (S_OK) in HRESULT è indicato da un valore pari a 0.Il valore di errore tipico per funzioni che restituiscono un Boolean false è uno stato di esito positivo quando viene eseguito il testo come HRESULT.È probabile che ciò produca risultati errati.

Esempio

Il codice seguente genera questo avviso:

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

HRESULT f( REFGUID riid1, REFGUID riid2 )
{
  // code ...
  return IsEqual(riid1, riid2);  
}

Per risolvere il problema, utilizzare il codice seguente:

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

HRESULT f( REFGUID riid1, REFGUID riid2 )
{
  if (IsEqual(riid1, riid2) == TRUE)
  {
    // code ...
    return S_OK;
  }
  else
  {
    // code ...
    return E_FAIL;
  }
}

Ai fini del presente avviso, il tipo SCODE equivale a HRESULT.

Per ulteriori informazioni, vedere Macro SUCCEEDED e Macro FAILED (le pagine potrebbero essere in inglese).