Condividi tramite


C6219

avviso C6219: Cast implicito tra tipi integer semanticamente diversi: confronto di HRESULT con 1 o TRUE in corso. Considerare viceversa l'utilizzo della macro SUCCEEDED or FAILED

L'avviso indica che è in corso un confronto tra un valore HRESULT e un valore esplicito diverso da HRESULT pari a (1) Questa condizione potrebbe produrre risultati non corretti perché il valore di HRESULT (S_OK) che indica in genere l'esito positivo è 0. Il confronto con un tipo Boolean ne determinerà la conversione implicita in false.

Esempio

Il codice seguente genera l'avviso perché CoGetMalloc restituisce un valore HRESULT, che viene quindi confrontato con TRUE:

#include <windows.h>

void f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  
  if (hr == TRUE)
  {
    // success code ...
  }
  else
  {
    // failure code   
  }
}

Nella maggior parte dei casi l'avviso è causato dal codice che esegue erroneamente il test di un HRESULT su un Boolean. In generale è consigliabile utilizzare le macro SUCCEEDED o FAILED per eseguire il test del valore di un tipo HRESULT. Per risolvere il problema, utilizzare il codice seguente:

#include <windows.h>

void f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  hr = CoGetMalloc(1, &pMalloc);
  
  if (SUCCEEDED(hr))
  {
    // success code ...
  }
  else
  {
    // failure code   
  }
}

Ai fini del presente avviso, il tipo SCODE equivale a HRESULT.