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.