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, 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 estiverem sendo armazenados em uma variável booleana.Qualquer comparação que usa a variável Boolean para testes de HRESULT sucesso ou fracasso pode 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 código a seguir:
#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: