C6216

Aviso C6216: inserido de compilador cast entre semanticamente diferentes tipos de integrais: um booleano tipo HRESULT

Este aviso indica que um valor booleano que está sendo usado como um HRESULT sem ser explicitamente cast. Tipos booleanos indicam o sucesso por um valor diferente de zero; sucesso (S_OK) em HRESULT é indicado por um valor de 0. O valor típico de falha para funções que retornam um booleano false é um status de êxito quando ele é testado como um HRESULT. Isso provavelmente levar a resultados incorretos.

Exemplo

O código a seguir gera este aviso:

#include <windows.h>
BOOL IsEqual(REFGUID, REFGUID);

HRESULT f( REFGUID riid1, REFGUID riid2 )
{
  // code ...
  return IsEqual(riid1, riid2);  
}

Para corrigir esse aviso, use o seguinte código:

#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;
  }
}

Para este aviso, o SCODE tipo é equivalente a HRESULT.

Para obter mais informações, consulte Macro bem-sucedida e Falha Macro.