Condividi tramite


C6221

Aggiornamento: novembre 2007

C6221

avviso C6221: cast implicito tra tipi integer semanticamente diversi: confronto di HRESULT con un integer. Si consiglia l'utilizzo della macro SUCCEEDED o FAILED

L'avviso indica che è in corso un confronto tra HRESULT e un intero diverso da zero. Poiché un esito positivo in HRESULT (S_OK) è rappresentato da un valore 0, un cast implicito di un HRESULT a un integer genererà un valore non corretto e determinerà probabilmente il risultato sbagliato. Ciò è spesso causato dalla previsione erronea che una funzione restituisca un valore integer quando in realtà restituisce un HRESULT.

Esempio

Il codice seguente genera questo avviso confrontando HRESULT con un valore integer:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (hr == 4)
  {
    // failure code ...
    return S_FALSE;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

Per risolvere il problema, nel codice seguente viene utilizzata la macro FAILED:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (FAILED(hr))
  {
    // failure code ...
    return S_FALSE;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

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

Vedere anche

Altre risorse

SUCCEEDED

FAILED