C6219
Aviso C6219: conversão implícita entre tipos inteiros semanticamente diferentes: comparando o HRESULT para 1 ou TRUE.Considere o uso de teve êxito ou FAILED macro em vez disso
Este aviso indica que uma HRESULT está sendo comparado com um explícita, não-HRESULT valor de um (1).Isso provavelmente levar a resultados incorretos, porque o valor sucesso típico de HRESULT (S_OK) é 0; comparando-a com um tipo Boolean implicitamente a converterá para false.
Exemplo
O código a seguir gera este aviso porque o CoGetMalloc retorna um HRESULT, que é comparado com TRUE:
#include <windows.h>
void f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (hr == TRUE)
{
// success code ...
}
else
{
// failure code
}
}
Na maioria das vezes, esse aviso é causado pelo código de teste por engano um HRESULT contra um valor booleano.Ele é geralmente melhor usar o SUCCEEDED ou FAILED macros para testar o valor de um HRESULT.Para corrigir esse aviso, use o código a seguir:
#include <windows.h>
void f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// success code ...
}
else
{
// failure code
}
}
Para este aviso, o SCODE tipo é equivalente a HRESULT.