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. Sucesso na HRESULT (S_OK) é representado por um 0. 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. Ele é normalmente causado por engano, esperando uma função para retornar um número inteiro, quando ele realmente 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 Falha Macro.