Compartilhar via


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.