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.
L'avviso indica che un HRESULT è in fase di assegnazione o inizializzazione con un valore esplicito pari a 1. I tipi boolean indicano l'esito positivo mediante un valore diverso da zero; l'esito positivo (S_OK) in HRESULT è indicato da un valore pari a 0. Questo avviso è spesso causato da una confusione fortuita 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.
Per ulteriori informazioni, vedere uno degli argomenti seguenti (le pagine potrebbero essere in inglese):