C6221
Aviso C6221: conversão implícita entre tipos inteiros semanticamente diferentes: comparando o HRESULT para um inteiro.Considere o uso de macros teve êxito ou falha em vez disso
Este aviso indica que uma HRESULT está sendo comparado a um número inteiro diferente de zero.Um sucesso em HRESULT (S_OK) é representado por um 0.Portanto, um elenco implícito de um HRESULT para um inteiro irá gerar um valor incorreto e é provável que levam ao resultado errado.Ele é normalmente causado por esperando por engano uma função para retornar um número inteiro, quando na verdade retorna um HRESULT.
Exemplo
O código a seguir gera este aviso comparando HRESULT contra um valor inteiro:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == 4)
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
Para corrigir esse aviso, o código a seguir usa a FAILED macro:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return S_FALSE;
}
else
{
// success code ...
return S_OK;
}
}
Para este aviso, o SCODE tipo é equivalente a HRESULT.
Para obter mais informações, consulte Macro bem-sucedida e FAILED Macro.