C6226
avviso C6226: cast implicito tra tipi integer semanticamente diversi: assegnazione di -1 a HRESULT in corso. Si consiglia l'utilizzo di E_FAIL.
L'avviso indica che un HRESULT è in fase di assegnazione o inizializzazione con un valore esplicito pari a 1. Questo avviso è spesso causato da una confusione fortuita di tipi HRESULT e Integer. Per indicare la riuscita di un'operazione, dovrebbe essere utilizzata la costante simbolica S_OK. Per indicare l'esito negativo, è necessario utilizzare le costanti simboliche che iniziano con E_costant.
Per ulteriori informazioni, vedere le macro SUCCEEDED e FAILED.
Esempio
Il codice seguente genera questo avviso:
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (FAILED(CoGetMalloc(1, &pMalloc)))
{
hr = -1;
// code ...
}
else
{
// code ...
}
}
Per risolvere il problema, utilizzare il codice seguente:
#include <windows.h>
VOID f( )
{
HRESULT hr;
LPMALLOC pMalloc;
if (FAILED(CoGetMalloc(1, &pMalloc)))
{
hr = E_FAIL;
// code ...
}
else
{
// code ...
}
}
Ai fini del presente avviso, il tipo SCODE equivale a HRESULT.