Condividi tramite


C6214

avviso C6214: cast tra tipi integer semanticamente diversi: da HRESULT a un tipo Boolean

Questo avviso indica che un tipo HRESULT è stato sottoposto a cast in un tipo Boolean. Il valore di esito positivo (S_OK) di un HRESULT è pari a 0. 0 indica tuttavia un errore per un tipo boolean. L'esecuzione del cast di HRESULT in un tipo Boolean e il relativo utilizzo in un'espressione di test restituisce un risultato non corretto. Talvolta, l'avviso viene visualizzato se un HRESULT viene memorizzato in una variabile Boolean. Qualsiasi confronto che utilizza la variabile Boolean per testare l'esito positivo o negativo di HRESULT potrebbe produrre risultati non corretti.

Esempio

Il codice seguente genera questo avviso:

#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;
  }
}

Per risolvere il problema, utilizzare il codice seguente:

#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;
  }
}

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

In generale, per verificare il valore di un tipo HRESULT è necessario utilizzare la macro SUCCEEDED o FAILED.

Per ulteriori informazioni, vedere uno degli argomenti riportati di seguito:

Macro SUCCEEDED

Macro FAILED