Compartilhar via


Método IPrintAsyncNotifyChannel::CloseChannel (prnasnot.h)

Fecha o canal.

Sintaxe

HRESULT CloseChannel(
  [in] IPrintAsyncNotifyDataObject *pData
);

Parâmetros

[in] pData

Ponteiro para uma notificação que especifica por que o canal foi fechado. Esse ponteiro pode ser NULL.

Valor retornado

HRESULT Severidade Significado
S_OK SUCCESS A função foi concluída com êxito.
CHANNEL_ACQUIRED ERROR

ou

SUCCESS

Outro ouvinte neste canal já respondeu. Somente o primeiro entrevistado pode continuar a comunicação com o remetente.

Se esse HRESULT tiver uma severidade ERROR, a função de chamada deverá lidar com a condição de erro.

CHANNEL_ALREADY_CLOSED ERROR

ou

SUCCESS

O canal já foi fechado. IPrintAsyncNotifyChannel::Release não deverá ser chamado se esse HRESULT for retornado porque o canal já foi fechado e liberado.

Se esse HRESULT tiver uma severidade ERROR, a função de chamada deverá lidar com a condição de erro.

CHANNEL_CLOSED_BY_ANOTHER_LISTENER ERROR Um aplicativo de escuta, diferente do chamador, fechou o canal de comunicação.
CHANNEL_CLOSED_BY_SAME_LISTENER ERROR O chamador já fechou o canal de comunicação.
INVALID_NOTIFICATION_TYPE ERROR O tipo de notificação especificado é inválido.
 

Os valores retornados são códigos de erro COM. Como essa função pode concluir a operação com êxito, mas retornar um HRESULT diferente de S_OK você deve usar a macro SUCCEEDED ou FAILED para determinar o sucesso da chamada. Para obter o HRESULT específico que foi retornado pela função , use a macro HRESULT_CODE. O exemplo de código a seguir mostra como essas macros podem ser usadas.

Consulte PrintAsyncNotifyError para obter outros valores retornados possíveis.

Para obter mais informações sobre códigos de erro do COM, confira Tratamento de erros.

if (SUCCEEDED(hr)) {
  // Call succeeded, check HRESULT value returned
  switch (HRESULT_CODE(hr)){
    case CHANNEL_ACQUIRED:
      // Some action 
      break;
    case CHANNEL_ALREADY_CLOSED:
      // Some action 
      break;
    default:
      // Default action 
      break;
  }
} else {
  // Call failed, check HRESULT value returned
  switch (HRESULT_CODE(hr)){
    case CHANNEL_CLOSED_BY_ANOTHER_LISTENER:
      // Some action 
      break;
    case CHANNEL_CLOSED_BY_SAME_LISTENER:
      // Some action 
      break;
    case INVALID_NOTIFICATION_TYPE:
      // Some action 
      break;
    case CHANNEL_ACQUIRED:
      // This can be an error and a successful return
      //  some action 
      break;
    case CHANNEL_ALREADY_CLOSED:
      // This can be an error and a successful return
      //  some action 
      break;
    default:
      // Default action 
      break;
  }
}

Comentários

CloseChannel pode ser chamado por ambos os lados do canal de comunicação, o componente hospedado pelo spooler de impressão ou pelo aplicativo de escuta.

Se uma chamada IPrintAsyncNotifyChannel::SendNotification for feita enquanto o spooler de impressão estiver processando uma chamada anterior para SendNotification, o spooler de impressão enfileirará as notificações. As notificações enfileiradas serão descartadas se o componente hospedado pelo spooler de impressão ou o aplicativo chamar CloseChannel.

CloseChannel não pode ser chamado imediatamente após a chamada para CreatePrintAsyncNotifyChannel.

Requisitos

   
Cliente mínimo com suporte Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho prnasnot.h
DLL Prnasnot.dll

Confira também

Interfaces de notificação de impressão assíncrona

IPrintAsyncNotifyChannel

Impressão