Partilhar via


C6221

Aviso C6221: Conversão implícita entre tipos inteiros semanticamente diferentes: Comparando o HRESULT para um inteiro. Considere o uso de macros teve êxito ou falha em vez disso

Este aviso indica que uma HRESULT está sendo comparado a um número inteiro diferente de zero. Sucesso na HRESULT (S_OK) é representado por um 0. Portanto, uma conversão implícita de um HRESULT para um inteiro para gerar um valor incorreto e é provável que levam a resultado incorreto. Ele é normalmente causado por engano, esperando uma função para retornar um número inteiro, quando ele realmente retorna um HRESULT.

Exemplo

O código a seguir gera este aviso comparando HRESULT contra um valor inteiro:

#include <windows.h>

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

Para corrigir esse aviso, o código a seguir usa a FAILED macro:

#include <windows.h>

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

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

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