C6216
aviso C6216: Conversão embutida no compilador entre tipos integrais semanticamente diferentes: um tipo booleano para o HRESULT
Esse aviso indica que um booliano está sendo usado como HRESULT sem ser convertido explicitamente.Os tipos booleanos indicam sucesso por um valor diferente de zero; o sucesso (S_OK) em HRESULT é indicado pelo valor 0.O valor típico de falha para as funções que retornam um booliano false é um status de êxito quando é testado como HRESULT.Isso pode resultar em 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 tipo SCODE é equivalente a HRESULT.
Para obter mais informações, consulte as macros APROVADAS e REPROVADAS.