Condividi tramite


C6225

Aggiornamento: novembre 2007

C6225

avviso C6225: Cast implicito tra tipi integer semanticamente diversi: assegnazione di 1 o TRUE a HRESULT in corso. Si consiglia l'utilizzo di S_FALSE.

Questo avviso indica che un tipo HRESULT è in fase di assegnazione o inizializzazione con un valore esplicito 1. I tipi Boolean indicano l'esito positivo dell'operazione con un valore diverso da zero, laddove l'esito positivo (S_OK) in HRESULT è indicato dal valore 0. Questo avviso è spesso determinato da una confusione accidentale di tipi Boolean e HRESULT. Per indicare la riuscita di un'operazione, dovrebbe essere utilizzata la costante simbolica S_OK.

Esempio

Nel codice riportato di seguito l'assegnazione di HRESULT genera l'avviso.

#include <windows.h>

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  if (SUCCEEDED(CoGetMalloc(1, &pMalloc)))
  {
    // code ...
    hr = S_OK;  
  }
  else
  {
    // code ...
    hr = 1;
  }
}

Per risolvere il problema, utilizzare il codice seguente:

VOID f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  if (SUCCEEDED(CoGetMalloc(1, &pMalloc)))
  {
    hr = S_OK;
    // code ...
  }
  else
  {
    hr = S_FALSE;
    // code ...
  }
}

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

Per indicare l'esito negativo di un'operazione, invece, dovrebbe essere utilizzata E_FAIL o un'altra costante.

Vedere anche

Altre risorse

SUCCEEDED

FAILED