Condividi tramite


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):

Macro SUCCEEDED

Macro FAILED