C6214
Aviso C6214: Converter entre tipos inteiros semanticamente diferentes: HRESULT para um tipo booliano
Este aviso indica que um HRESULT está sendo convertido em um tipo booliano. O valor de sucesso (S_OK) de um HRESULT é igual a 0. No entanto, 0 indica falha para um tipo booliano.Projetando um HRESULT para um valor booliano tipo e, em seguida, usá-lo em uma expressão de teste produzirá um resultado incorreto. Às vezes, este aviso ocorre se um HRESULT estiverem sendo armazenados em uma variável booleana. Qualquer comparação que usa a variável booliano para testar HRESULT sucesso ou falha poderia levar a resultados incorretos.
Exemplo
O código a seguir gera este aviso:
#include <windows.h>
BOOL f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if ((BOOL)hr) // warning 6214
{
// success code ...
return TRUE;
}
else
{
// failure code ...
return FALSE;
}
}
Para corrigir esse aviso, use o seguinte código:
#include <windows.h>
BOOL f( )
{
HRESULT hr;
LPMALLOC pMalloc;
hr = CoGetMalloc(1, &pMalloc);
if (SUCCEEDED(hr))
{
// success code ...
return TRUE;
}
else
{
// failure code ...
return FALSE;
}
}
Para esse aviso, o SCODE tipo é equivalente a HRESULT.
Normalmente, a SUCCEEDED ou FAILED macro deve ser usada para teste o valor de um HRESULT.