Função CreatePrintAsyncNotifyChannel (prnasnot.h)
Cria um canal de comunicação entre um componente de impressão hospedado pelo Spooler de Impressão, como um driver de impressão ou um monitor de porta, e um aplicativo que recebe notificações do componente.
Sintaxe
HRESULT CreatePrintAsyncNotifyChannel(
[in] PCWSTR pszName,
[in] PrintAsyncNotificationType *pNotificationType,
[in] PrintAsyncNotifyUserFilter eUserFilter,
[in] PrintAsyncNotifyConversationStyle eConversationStyle,
[in] IPrintAsyncNotifyCallback *pCallback,
[out] IPrintAsyncNotifyChannel **ppIAsynchNotification
);
Parâmetros
[in] pszName
Um ponteiro para o nome de um servidor de impressão ou fila de impressão.
[in] pNotificationType
Um ponteiro para o GUID do esquema de dados para o tipo de notificações a serem enviadas no canal.
[in] eUserFilter
Um valor que especifica se as notificações serão enviadas para:
- Somente aplicativos que estão sendo executados como o mesmo usuário que o remetente de plug-in hospedado no Spooler de Impressão.
- Um conjunto mais amplo de aplicativos de escuta.
[in] eConversationStyle
Um valor que especifica se a comunicação é bidirecional ou unidirecional.
[in] pCallback
Um ponteiro para um objeto que o aplicativo de escuta usará para chamar de volta o componente hospedado pelo Spooler de Impressão. Isso deverá ser NULL se directionality for kUniDirectional.
[out] ppIAsynchNotification
Um ponteiro para o novo canal.
Retornar valor
HRESULT | Severidade | Significado |
---|---|---|
S_OK | SUCCESS | A função foi concluída com êxito. |
CHANNEL_ALREADY_OPENED | ERROR | O canal já foi aberto. |
MAX_CHANNEL_COUNT_EXCEEDED | ERROR | O número máximo de aplicativos ouvintes já se registrou para o tipo de notificação especificado com a fila ou o servidor de impressão especificado. O máximo padrão é 10.000. |
Os valores retornados são códigos de erro COM. Como essa função pode concluir a operação com êxito, ainda retorna 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 retornado pela função, use a macro HRESULT_CODE.
O exemplo de código a seguir mostra como essas macros podem ser usadas para avaliar o valor retornado.
if (SUCCEEDED(hr)){
//Call was successful
}
if (FAILED(hr)) {
// Call failed
}
if (FAILED(hr)) {
// Call failed
switch (HRESULT_CODE(hr)){
case CHANNEL_ALREADY_OPENED:
// Some action
break;
case MAX_CHANNEL_COUNT_EXCEEDED:
// Some action
break;
default:
//Default action
break;
}
} else {
//call succeeded
}
Para obter mais informações sobre códigos de erro do COM, confira Tratamento de erros.
Consulte PrintAsyncNotifyError para obter outros valores de retorno possíveis.
Comentários
Para fechar um canal, chame IPrintAsyncNotifyChannel::CloseChannel; no entanto, IPrintAsyncNotifyChannel::CloseChannel não pode ser chamado imediatamente após a chamada para CreatePrintAsyncNotifyChannel.
Chame IPrintAsyncNotifyChannel::Release() somente:
- se for uma correspondência explícita a uma chamada anterior de IPrintAsyncNotifyChannel::AddRef().
- se o canal for um canal UniDirectional e você estiver abandonando o ponteiro recebido em uma chamada bem-sucedida para CreatePrintAsyncNotifyChannel.
- se, depois de criar um canal Bidirecional ou na implementação de IPrintNotifyAsyncCallback::OnEventNotify e:
- você não chamou IPrintAsyncNotifyChannel::SendNotification ou IPrintAsyncNotifyChannel::CloseChannel OR
- você não tentou novamente uma chamada para IPrintAsyncNotifyChannel::SendNotification ou IPrintAsyncNotifyChannel::CloseChannel que falhou em OR
- no lado do servidor, você não tentou novamente uma chamada para IPrintAsyncNotifyChannel::SendNotification que teve êxito com o valor retornado NO_LISTENER OR
- no lado do cliente, você não tentou novamente uma chamada para IPrintAsyncNotifyChannel::SendNotification que teve êxito com o valor retornado CHANNEL_ACQUIRED.
Requisitos
Requisito | Valor |
---|---|
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 |
Biblioteca | Winspool.lib |
DLL | Spoolss.dll |
Confira também
Client Impersonation (em inglês)