C6216
Ostrzeżenie C6216: wstawione przez kompilator rzutowanie pomiędzy różnymi semantycznie typami całkowitymi: typ Boolean na HRESULT
To ostrzeżenie wskazuje, że wartość logiczną jest używana jako HRESULT bez jest jawnego rzutowania.Typy Boolean wskazują sukces przez wartość nie będącą zerem; sukces (S_OK) w HRESULT jest wskazywany przez wartość 0.Typowa wartość awarii dla funkcji, które zwracają wartość logiczną false, jest stanem powodzenia w testach HRESULT.Prawdopodobnie doprowadzi to do niepoprawnych wyników.
Przykład
Poniższy kod generuje to ostrzeżenie:
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
HRESULT f( REFGUID riid1, REFGUID riid2 )
{
// code ...
return IsEqual(riid1, riid2);
}
Aby poprawić to ostrzeżenie, należy użyć następującego kodu:
#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);
HRESULT f( REFGUID riid1, REFGUID riid2 )
{
if (IsEqual(riid1, riid2) == TRUE)
{
// code ...
return S_OK;
}
else
{
// code ...
return E_FAIL;
}
}
W przypadku tego ostrzeżenia typ SCODE jest równoważny z HRESULT.
Aby uzyskać więcej informacji, zobacz Makro SUCCEEDED i Makro FAILED.