C6215
avviso C6215: cast tra tipi integer semanticamente diversi: da un tipo Boolean a HRESULT
Questo avviso indica che è stato eseguito il cast di un tipo Boolean a HRESULT. I tipi boolean indicano l'esito positivo mediante un valore diverso da zero, mentre l'esito positivo (S_OK) in HRESULT è indicato da un valore pari a 0. Il cast di un tipo Boolean a HRESULT e quindi il suo utilizzo in un'espressione di test potrebbero produrre un risultato errato.
L'avviso è spesso determinato dall'utilizzo di un Boolean come argomento per la macro SUCCEEDED o FAILED, che esplicitamente eseguono il cast dei relativi argomenti a un HRESULT.
Esempio
Il codice seguente genera questo avviso:
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
void f( REFGUID riid1, REFGUID riid2 )
{
if (SUCCEEDED( IsEqual( riid1, riid2 ) )) //warning 6215
{
// success code ...
}
else
{
// failure code ...
}
}
In genere le macro SUCCEEDED o FAILED devono essere applicate solo a HRESULT.
Per risolvere il problema, utilizzare il codice seguente:
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
void f( REFGUID riid1, REFGUID riid2 )
{
if (IsEqual( riid1, riid2 ) == TRUE)
{
// code for riid1 == riid2
}
else
{
// code for riid1 != riid2
}
}
Per ulteriori informazioni, vedere Macro SUCCEEDED e Macro FAILED (le pagine potrebbero essere in inglese).