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

Envía una notificación de un componente hospedado por el administrador de trabajos de impresión a una o varias aplicaciones de escucha, o envía una respuesta de una aplicación de vuelta a un componente.

Sintaxis

HRESULT SendNotification(
  [in] IPrintAsyncNotifyDataObject *pData
);

Parámetros

[in] pData

Puntero al contenido de la notificación y su tamaño y tipo.

Valor devuelto

HRESULT severity Significado
S_OK CORRECTA Si se devuelve este valor, significa que la función se completó correctamente.
ASYNC_CALL_ALREADY_PARKED ERROR No se puede enviar una notificación porque el destinatario no ha consumido la notificación anterior.
ASYNC_CALL_IN_PROGRESS ERROR El canal está ocupado con otra notificación o respuesta.
ASYNC_NOTIFICATION_FAILURE ERROR Ninguno de los agentes de escucha de este canal está configurado para recibir este tipo de notificación o se produjo un problema al asignar los recursos necesarios para completar esta llamada.
CHANNEL_ACQUIRED ERROR Otro agente de escucha ha adquirido este canal. No se envió la notificación. El agente de escucha original ya no recibirá notificaciones.
CHANNEL_ALREADY_CLOSED ERROR No se pudo enviar la notificación porque el canal se cerró antes de esta llamada.
CHANNEL_NOT_OPENED ERROR No se pudo enviar la notificación porque el canal no se abrió antes de esta llamada.
CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION ERROR No se puede enviar una notificación porque no se ha recibido una respuesta a la última notificación.
INVALID_NOTIFICATION_TYPE ERROR El tipo de notificación especificado no es válido.
MAX_NOTIFICATION_SIZE_EXCEEDED ERROR Se ha superado el tamaño máximo de los datos de notificación. De forma predeterminada, el tamaño máximo de datos permitido es de 10 megabytes.
NO_LISTENERS CORRECTA Indica que no hay ninguna aplicación de escucha registrada.
UNIRECTIONAL_NOTIFICATION_LOST CORRECTA Uno o varios agentes de escucha no han recibido esta notificación, pero al menos un agente de escucha recibió esta notificación.
 

Los valores devueltos son códigos de error COM. Dado que esta función puede completar la operación correctamente pero devolver un HRESULT distinto de S_OK debe usar la macro SUCCEEDED o FAILED para determinar el éxito de la llamada. Para obtener el VALOR HRESULT específico devuelto por la función , use la macro HRESULT_CODE. En el ejemplo de código siguiente se muestra cómo se pueden usar estas macros.

Consulte PrintAsyncNotifyError para ver otros valores devueltos posibles.

Para obtener más información sobre los códigos de error COM, vea Control de errores.

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;
  }
}

Comentarios

En el caso de un canal unidireccional, si se realiza una llamada SendNotification mientras la cola de impresión está procesando una llamada a SendNotification anterior, el administrador de trabajos de impresión pone en cola la notificación pendiente. Las notificaciones en cola se descartan si el componente hospedado por el administrador de trabajos de impresión o la aplicación llama a IPrintAsyncNotifyChannel::CloseChannel.

En el caso de un canal bidireccional, si se realiza una llamada SendNotification mientras el Print-Spooler está procesando una llamada a SendNotification anterior, se producirá un error en la llamada pendiente. En ese caso, si el autor de la llamada es un remitente dentro del administrador de trabajos de impresión, SendNotification devuelve CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION. Si el autor de la llamada es un agente de escucha que envía una respuesta, SendNotification devuelve ASYNC_CALL_IN_PROGRESS.

Cuando existen varios agentes de escucha para el mismo canal bidireccional, la notificación inicial enviada en el canal se entregará a todos los agentes de escucha. El primer agente de escucha que se va a responder adquirirá el canal. Los agentes de escucha que llaman a SendNotification después de adquirir el canal producirán un error CHANNEL_ACQUIRED.

Es posible que un agente de escucha reciba una notificación inicial en un canal bidireccional no esté interesado en adquirir el canal. En este caso, el agente de escucha puede llamar al método IUnknown::Release . No es necesario llamar al método IUnknown::Release si se llama a los métodos SendNotification o IPrintAsyncNotifyChannel::CloseChannel .

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2008 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado prnasnot.h
Archivo DLL Prnasnot.dll

Consulte también

Interfaces de notificación de impresión asincrónica

IPrintAsyncNotifyChannel

Impresión