Partilhar via


C6220

Aviso C6220 - conversão implícita entre tipos inteiros semanticamente diferentes: comparando o HRESULT como -1.Considere usar a macro teve êxito ou falha em vez disso

Este aviso indica que uma HRESULT está sendo comparado com um explícita, não-HRESULT valor -1, que não é um bem formado HRESULT.Uma falha em HRESULT (E_FAIL) não é representado por -1.Portanto, um elenco implícito de um HRESULT para um inteiro irá gerar um valor incorreto e é provável que levam ao resultado errado.

Exemplo

Na maioria dos casos, esse aviso é causado pelo código por engano, esperando que uma função que deve retornar um HRESULT em vez disso, retorna um número inteiro, por meio de – 1 como um valor de falha.O exemplo de código a seguir gera este aviso:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (hr == -1)
  {
    // failure code ...
    return E_FAIL;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

É melhor usar o SUCCEEDED ou FAILED macro para testar o valor de um HRESULT.Para corrigir esse aviso, use o código a seguir:

#include <windows.h>

HRESULT f( )
{
  HRESULT hr;
  LPMALLOC pMalloc;
  
  hr = CoGetMalloc(1, &pMalloc);
  if (FAILED(hr))
  {
    // failure code ...
    return E_FAIL;
  }
  else
  {
    // success code ...
    return S_OK;
  }
}

Para este aviso, o SCODE tipo é equivalente a HRESULT.

Comparação explícita é apropriada para verificar se há específico HRESULT valores, como, E_FAIL.Caso contrário, use o SUCCEEDED ou FAILED macros.

Para obter mais informações, consulte Macro bem-sucedida e FAILED Macro.