C6221
Aviso C6221: Conversão implícita entre diferentes semanticamente inteiro tipos: Comparando HRESULT para um inteiro.Em vez disso, use macros teve êxito ou falha
Este aviso indica que um HRESULT está sendo comparado a um número inteiro diferente de zero. Um sucesso em HRESULT (S_OK) é representada por 0. Portanto, uma conversão implícita de um HRESULT para um inteiro irá gerar um valor incorreto e é provável que a liderar o resultado errado. É normalmente causado por esperando por engano 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 com 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 o 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 esse aviso, o SCODE tipo é equivalente a HRESULT.