Compartilhar via


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

Confira também

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

IPrintAsyncNotifyChannel

Impressão