Condividi tramite


C6220

Aggiornamento: novembre 2007

C6220

avviso C6220: cast implicito tra tipi integer semanticamente diversi: confronto di HRESULT con -1 in corso. Si consiglia l'utilizzo della macro SUCCEEDED o FAILED

L'avviso indica che è in corso un confronto tra HRESULT e un valore -1 esplicito diverso da HRESULT, ovvero un HRESULT non ben formato. Poiché un esito negativo in HRESULT (E_FAIL) non è rappresentato da un valore -1, un cast implicito di un HRESULT a un integer genererà un valore non corretto e determinerà probabilmente il risultato sbagliato.

Esempio

Nella maggior parte dei casi, l'avviso è causato dal codice, che prevede erroneamente che una funzione che dovrebbe restituire un HRESULT restituisca invece un numero intero, utilizzando -1 come valore per l'esito negativo. L'esempio di codice riportato di seguito genera questo avviso:

#include <windows.h>

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

È consigliabile utilizzare le macro SUCCEEDED o FAILED per eseguire il test del valore di un tipo HRESULT. Per risolvere il problema, utilizzare il codice seguente:

#include <windows.h>

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

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

Il confronto esplicito è adatto a verificare valori HRESULT specifici, ad esempio E_FAIL. In altri casi, utilizzare le macro SUCCEEDED o FAILED.

Vedere anche

Altre risorse

SUCCEEDED

FAILED