C6214
aviso C6214: Conversão entre tipos inteiros semanticamente diferentes: HRESULT para um tipo booleano
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 a falha para um tipo booleano.A conversão de HRESULT para um tipo booleano e usá-lo em uma expressão de teste produzirá um resultado incorreto.Às vezes, esse aviso ocorre se um HRESULT estiver sendo armazenado em uma variável booliana.Qualquer comparação que usa a variável booleana para testar o sucesso ou a falha de HRESULT 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 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 tipo SCODE é equivalente a HRESULT.
Normalmente, a macro SUCCEEDED ou FAILED deve ser usada para testar o valor de um HRESULT.
Para obter mais informações, consulte um dos seguintes tópicos:
Para aproveitar a metodologia de alocação de memória moderna do C++, use os mecanismos que são fornecidos pela STL (Biblioteca de Modelos Padrão) do C++.Incluem shared_ptr, unique_ptr e vector.Para obter mais informações, consulte Ponteiros inteligentes (C++ moderno) e Referência da Biblioteca Padrão C++.