Condividi tramite


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. Un esito positivo in HRESULT (S_OK) è rappresentato da uno 0. Pertanto, un cast implicito di un HRESULT a un Integer genera un valore errato e probabilmente produce il risultato non corretto. Ciò è spesso causato dalla previsione erronea che una funzione restituisca un Integer quando in realtà restituisce un HRESULT.

Esempio

Il codice seguente genera questo avviso confrontando HRESULT con un 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 correggere questo avviso, 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.

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