Condividi tramite


C6230

avviso C6230: cast implicito tra tipi integer semanticamente diversi: utilizzo di HRESULT in un contesto Booleano

L'avviso indica che viene utilizzato un HRESULT bare in un contesto, ad esempio l'istruzione if in cui è previsto un risultato Booleano.È probabile che ciò produca risultati errati.Il valore che solitamente indica l'esito positivo per HRESULT (S_OK) risulta false quando viene testato come valore booleano.

Esempio

Il codice seguente genera questo avviso:

#include <windows.h>

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

Nella maggior parte delle situazioni, è opportuno utilizzare la macro SUCCEEDED o FAILED per testare il valore di HRESULT.Per risolvere il problema, utilizzare il codice seguente:

#include <windows.h>

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

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