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 |