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.