C6220
Aviso C6220 - conversão implícita entre tipos inteiros semanticamente diferentes: Comparando o HRESULT como -1. Considere usar a macro teve êxito ou falha em vez disso
Este aviso indica que uma HRESULT está sendo comparado com um explícito não-HRESULT valor -1, que é não um bem formado HRESULT. Uma falha em HRESULT (E_FAIL) não esteja representada por -1. Portanto, uma conversão implícita de um HRESULT para um inteiro para gerar um valor incorreto e é provável que levam a resultado incorreto.
Exemplo
Na maioria dos casos, esse aviso é causado pelo código por engano, esperando que uma função que deve retornar um HRESULT em vez disso, retorna um inteiro, por meio de – 1 como um valor de falha. O exemplo de código a seguir gera este aviso:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == -1)
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
É melhor usar o SUCCEEDED ou FAILED macro para testar o valor de um HRESULT. Para corrigir esse aviso, use o seguinte código:
#include <windows.h>
HRESULT f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (FAILED(hr))
{
// failure code ...
return E_FAIL;
}
else
{
// success code ...
return S_OK;
}
}
Para este aviso, o SCODE tipo é equivalente a HRESULT.
Comparação explícita é apropriada para verificar se há específico HRESULT valores, como E_FAIL. Caso contrário, use o SUCCEEDED ou FAILED macros.
Para obter mais informações, consulte Macro bem-sucedida e Falha Macro.