C6219
Aggiornamento: novembre 2007
C6219
avviso C6219: Cast implicito tra tipi integer semanticamente diversi: confronto di HRESULT con 1 o TRUE in corso. Si consiglia l'utilizzo della macro SUCCEEDED o FAILED
L'avviso indica che è in corso un confronto tra un valore HRESULT e un valore esplicito diverso da HRESULT pari a (1) che potrebbe produrre risultati errati perché il valore che solitamente indica l'esito positivo di HRESULT (S_OK)è 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.