Compartilhar via


C6217

Aviso C6217: Conversão implícita entre diferentes semanticamente inteiro tipos: Testando HRESULT com 'não'.Em vez disso, use macro teve êxito ou falha

Este aviso indica que um HRESULT está sendo testado com o não ()!) operador. Um sucesso (S_OK) na HRESULT é indicado por um valor de 0. No entanto, 0 indica falha para um tipo booliano. De testeHRESULT com o não operador ()!) para determinar qual código pode causar bloco para executar seguindo o caminho de código errada. Isso irá causar resultados indesejados.

Exemplo

O código a seguir gera este aviso porque o não operador é usado para determinar o sucesso ou fracasso de um HRESULT valor. Nesse caso, o caminho de código errada é 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 FAILED macro em busca de falha:

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

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

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

O valor sucesso típico de HRESULT (S_OK)é false Quando ele é testado sistema autônomo um valor booliano.

Para verificar se HRESULT é um sucesso, use o SUCCEEDED macro em vez disso.

Consulte também

Outros recursos

BEM-SUCEDIDA

FALHA