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.