Compartilhar via


C6217

aviso C6217: Conversão implícita entre tipos inteiros semanticamente diferentes: testando HRESULT e "não".Considere usar SUCEDIDO ou FAILED macro por vez.

Esse aviso indica que HRESULT está sendo testado com não o operador de!().UmS_OKêxito () em HRESULT é indicado por um valor de 0.No entanto, 0 indica a falha para um tipo booleano.Não teste HRESULT com o operador (!) para determinar quais o bloco de código para execução pode causar o seguinte caminho de errado de código.Isso resultará nos resultados indesejados.

Exemplo

O código a seguir gerenciar esse aviso porque não o operador é usado para determinar o êxito ou a falha de um valor de HRESULT .Nesse caso, o código incorreta o caminho é executado porque ( !hr ) executa o código de falha:

#include <windows.h>
#include <objbase.h>

void f( )
{
  HRESULT hr = CoInitialize(NULL); 
  if (!hr)
  {
    // failure code ...
  }
  else
  {
    // success code ...
  }
}

Para corrigir esse aviso, o código a seguir usa a macro de FAILED para procurar a falha:

#include <windows.h>
#include <objbase.h>

void f( )
{
  HRESULT hr = CoInitialize(NULL);  
  if (FAILED(hr))
  {
    // failure code ...
  }
  else
  {
    // success code ...
  }
}

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

O valor com êxito típico de HRESULTS_OK() é false quando é testado como um booliano.

Para verificar se HRESULT é um êxito, use a macro de SUCCEEDED em vez disso.