C6214
Aviso C6214: Converter entre tipos inteiros semanticamente diferentes: HRESULT para um tipo booleano
Este aviso indica que uma HRESULT está sendo convertido para um tipo booleano. O valor de sucesso (S_OK) de um HRESULT é igual a 0. No entanto, o 0 indica falha para um tipo booleano. Projetando uma HRESULT em um booleano tipo e, em seguida, usá-lo em uma expressão de teste produzirá um resultado incorreto. Às vezes, este aviso ocorre se um HRESULT está sendo armazenada em uma variável booleana. Qualquer comparação que usa a variável Boolean para testes de HRESULT êxito 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 este aviso, o SCODE tipo é equivalente a HRESULT.
Normalmente, o SUCCEEDED ou FAILED macro deve ser usada para testar o valor de um HRESULT.
Para obter mais informações, consulte um dos seguintes tópicos: