Método IPrintAsyncNotifyChannel::SendNotification (prnasnot.h)
Envia uma notificação de um componente hospedado pelo spooler de impressão para um ou mais aplicativos de escuta ou envia uma resposta de um aplicativo de volta para um componente.
Sintaxe
HRESULT SendNotification(
[in] IPrintAsyncNotifyDataObject *pData
);
Parâmetros
[in] pData
Um ponteiro para o conteúdo da notificação e seu tamanho e tipo.
Retornar valor
HRESULT | Severidade | Significado |
---|---|---|
S_OK | SUCCESS | A função foi concluída com êxito. |
ASYNC_CALL_ALREADY_PARKED | ERROR | Uma notificação não pode ser enviada porque o destinatário não consumiu a notificação anterior. |
ASYNC_CALL_IN_PROGRESS | ERROR | O canal está ocupado com outra notificação ou resposta. |
ASYNC_NOTIFICATION_FAILURE | ERROR | Nenhum dos ouvintes neste canal está configurado para receber esse tipo de notificação ou houve um problema ao alocar os recursos necessários para concluir essa chamada. |
CHANNEL_ACQUIRED | ERROR | Outro ouvinte adquiriu este canal. A notificação não foi enviada. O ouvinte original não receberá mais notificações. |
CHANNEL_ALREADY_CLOSED | ERROR | A notificação não pôde ser enviada porque o canal foi fechado antes dessa chamada. |
CHANNEL_NOT_OPENED | ERROR | A notificação não pôde ser enviada porque o canal não foi aberto antes dessa chamada. |
CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION | ERROR | Uma notificação não pode ser enviada porque uma resposta à última notificação não foi recebida. |
INVALID_NOTIFICATION_TYPE | ERROR | O tipo de notificação especificado é inválido. |
MAX_NOTIFICATION_SIZE_EXCEEDED | ERROR | O tamanho máximo dos dados de notificação foi excedido. Por padrão, o tamanho máximo de dados permitido é de 10 megabytes. |
NO_LISTENERS | SUCCESS | Indica que não há aplicativos de escuta registrados. |
UNIRECTIONAL_NOTIFICATION_LOST | SUCCESS | Um ou mais ouvintes não receberam essa notificação, mas pelo menos um ouvinte recebeu essa notificação. |
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.
Consulte PrintAsyncNotifyError para obter outros valores de retorno 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 S_OK:
// Some action
break;
case NO_LISTENERS:
// Some action
break;
case UNIRECTIONAL_NOTIFICATION_LOST:
// Some action
break;
default:
// Default action
break;
}
} else {
// Call failed, check HRESULT value returned
switch (HRESULT_CODE(hr)){
case ASYNC_NOTIFICATION_FAILURE:
// Some action
break;
case CHANNEL_ALREADY_CLOSED:
// Some action
break;
case CHANNEL_NOT_OPENED:
// Some action
break;
//
// ... Test for other error cases
//
default:
// Default action
break;
}
}
Comentários
Para um canal unidirecional, se uma chamada SendNotification for feita enquanto o spooler de impressão estiver processando uma chamada SendNotification anterior, o spooler de impressão enfileira a notificação pendente. As notificações enfileiradas serão descartadas se o componente hospedado pelo spooler de impressão ou o aplicativo chamar IPrintAsyncNotifyChannel::CloseChannel.
Para um canal bidirecional, se uma chamada SendNotification for feita enquanto o Print-Spooler estiver processando uma chamada SendNotification anterior, a chamada pendente falhará. Nesse caso, se o chamador for um remetente dentro do spooler de impressão, SendNotification retornará CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION. Se o chamador for um ouvinte enviando uma resposta, SendNotification retornará ASYNC_CALL_IN_PROGRESS.
Quando existirem vários ouvintes para o mesmo canal bidirecional, a notificação inicial enviada no canal será entregue a todos os ouvintes. O primeiro ouvinte a responder adquirirá o canal. Os ouvintes que chamam SendNotification depois que o canal foi adquirido falharão com o erro CHANNEL_ACQUIRED.
Um ouvinte que recebe uma notificação inicial em um canal bidirecional pode não estar interessado em adquirir o canal. Nesse caso, o ouvinte pode chamar o método IUnknown::Release . O método IUnknown::Release não precisará ser chamado se os métodos SendNotification ou IPrintAsyncNotifyChannel::CloseChannel forem chamados.
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 |
DLL | Prnasnot.dll |