Compartir a través de


Función CreatePrintAsyncNotifyChannel (prnasnot.h)

Crea un canal de comunicación entre un componente de impresión hospedado por el administrador de impresión, como un controlador de impresión o un monitor de puerto, y una aplicación que recibe notificaciones del componente.

Sintaxis

HRESULT CreatePrintAsyncNotifyChannel(
  [in]  PCWSTR                            pszName,
  [in]  PrintAsyncNotificationType        *pNotificationType,
  [in]  PrintAsyncNotifyUserFilter        eUserFilter,
  [in]  PrintAsyncNotifyConversationStyle eConversationStyle,
  [in]  IPrintAsyncNotifyCallback         *pCallback,
  [out] IPrintAsyncNotifyChannel          **ppIAsynchNotification
);

Parámetros

[in] pszName

Puntero al nombre de un servidor de impresión o una cola de impresión.

[in] pNotificationType

Puntero al GUID del esquema de datos para el tipo de notificaciones que se enviarán en el canal.

[in] eUserFilter

Valor que especifica si las notificaciones se enviarán a:

  • Solo las aplicaciones que se ejecutan como el mismo usuario que el remitente del complemento hospedado en Spooler de impresión.
  • Un conjunto más amplio de aplicaciones de escucha.

[in] eConversationStyle

Valor que especifica si la comunicación es bidireccional o unidireccional.

[in] pCallback

Puntero a un objeto que la aplicación de escucha usará para devolver el componente hospedado en cola de impresión. Debe ser NULL si la direccionalidad es kUniDirectional.

[out] ppIAsynchNotification

Puntero al nuevo canal.

Valor devuelto

HRESULT severity Significado
S_OK CORRECTA Si se devuelve este valor, significa que la función se completó correctamente.
CHANNEL_ALREADY_OPENED ERROR El canal ya se ha abierto.
MAX_CHANNEL_COUNT_EXCEEDED ERROR El número máximo de aplicaciones de escucha ya se han registrado para el tipo de notificación especificado con la cola o el servidor de impresión especificados. El máximo predeterminado es 10 000.
 

Los valores devueltos son códigos de error COM. Dado que esta función puede completar correctamente la operación pero devolver un VALOR HRESULT distinto de S_OK debe usar la macro SUCCEEDED o FAILED para determinar el éxito de la llamada. Para obtener el 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 para evaluar el valor devuelto.

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 obtener más información sobre los códigos de error COM, vea Control de errores.

Consulte PrintAsyncNotifyError para ver otros valores devueltos posibles.

Comentarios

Nota Se trata de una función de bloqueo o sincrónica y podría no devolverse inmediatamente. La rapidez con la que devuelve esta función depende de factores en tiempo de ejecución, como el estado de red, la configuración del servidor de impresión y la implementación del controlador de impresora, factores que son difíciles de predecir al escribir una aplicación. Llamar a esta función desde un subproceso que administra la interacción con la interfaz de usuario podría hacer que la aplicación parezca que no responde.
 
Un componente solo puede abrir un canal si se ejecuta en el proceso del administrador de trabajos de impresión. Por ejemplo, si una aplicación carga un controlador de impresora, el controlador no puede abrir un canal, pero un controlador de impresora cargado dentro del administrador de trabajos de impresión puede abrir un canal. Las aplicaciones de escucha pueden estar dentro o fuera del proceso del administrador de trabajos de impresión.

Para cerrar un canal, llame a IPrintAsyncNotifyChannel::CloseChannel; sin embargo, no se puede llamar a IPrintAsyncNotifyChannel::CloseChannel inmediatamente después de la llamada a CreatePrintAsyncNotifyChannel.

Llame solo a IPrintAsyncNotifyChannel::Release():

  1. si es una coincidencia explícita con una llamada anterior a IPrintAsyncNotifyChannel::AddRef().
  2. si el canal es un canal unidireccional y abandona el puntero recibido en una llamada correcta a CreatePrintAsyncNotifyChannel.
  3. Si, después de crear un canal bidireccional o en la implementación de IPrintNotifyAsyncCallback::OnEventNotify y:
    1. no llamó a IPrintAsyncNotifyChannel::SendNotification o IPrintAsyncNotifyChannel::CloseChannel OR
    2. no ha reintento una llamada a IPrintAsyncNotifyChannel::SendNotification o IPrintAsyncNotifyChannel::CloseChannel con errores or
    3. en el lado servidor, no reintento una llamada a IPrintAsyncNotifyChannel::SendNotification que se realizó correctamente con el valor devuelto NO_LISTENER OR
    4. en el lado cliente, no ha reintento una llamada a IPrintAsyncNotifyChannel::SendNotification que se realizó correctamente con el valor devuelto CHANNEL_ACQUIRED.

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
Library Winspool.lib
Archivo DLL Spoolss.dll

Consulte también

Suplantación de cliente

Funciones de la API del administrador de trabajos de impresión

Impresión