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.