Udostępnij za pośrednictwem


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.