Partager via


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

Envoie une notification à partir d’un composant hébergé par le spouleur d’impression à une ou plusieurs applications à l’écoute, ou envoie une réponse d’une application à un composant.

Syntaxe

HRESULT SendNotification(
  [in] IPrintAsyncNotifyDataObject *pData
);

Paramètres

[in] pData

Pointeur vers le contenu de la notification, sa taille et son type.

Valeur retournée

HRESULT Gravité Signification
S_OK SUCCESS La fonction s’est terminée avec succès.
ASYNC_CALL_ALREADY_PARKED ERROR Impossible d’envoyer une notification, car le destinataire n’a pas consommé la notification précédente.
ASYNC_CALL_IN_PROGRESS ERROR Le canal est occupé par une autre notification ou réponse.
ASYNC_NOTIFICATION_FAILURE ERROR Aucun des écouteurs de ce canal n’est configuré pour recevoir ce type de notification ou il y a eu un problème d’allocation des ressources nécessaires pour terminer cet appel.
CHANNEL_ACQUIRED ERROR Un autre écouteur a acquis ce canal. La notification n’a pas été envoyée. L’écouteur d’origine ne reçoit plus de notifications.
CHANNEL_ALREADY_CLOSED ERROR La notification n’a pas pu être envoyée, car le canal a été fermé avant cet appel.
CHANNEL_NOT_OPENED ERROR La notification n’a pas pu être envoyée, car le canal n’a pas été ouvert avant cet appel.
CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION ERROR Impossible d’envoyer une notification, car aucune réponse à la dernière notification n’a été reçue.
INVALID_NOTIFICATION_TYPE ERROR Le type de notification spécifié n’est pas valide.
MAX_NOTIFICATION_SIZE_EXCEEDED ERROR La taille maximale des données de notification a été dépassée. Par défaut, la taille de données maximale autorisée est de 10 mégaoctets.
NO_LISTENERS SUCCESS Indique qu’il n’existe aucune application d’écoute inscrite.
UNIRECTIONAL_NOTIFICATION_LOST SUCCESS Un ou plusieurs écouteurs n’ont pas reçu cette notification, mais au moins un écouteur a reçu cette notification.
 

Les valeurs retournées sont des codes d’erreur COM. Étant donné que cette fonction peut terminer l’opération avec succès tout en renvoyant un HRESULT autre que S_OK vous devez utiliser la macro SUCCEEDED ou FAILED pour déterminer la réussite de l’appel. Pour obtenir le HRESULT spécifique retourné par la fonction, utilisez la macro HRESULT_CODE. L’exemple de code suivant montre comment ces macros peuvent être utilisées.

Consultez PrintAsyncNotifyError pour obtenir d’autres valeurs de retour possibles.

Pour plus d’informations sur les codes d’erreur COM, consultez Gestion des erreurs.

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

Remarques

Pour un canal unidirectionnel, si un appel SendNotification est effectué pendant que le spouleur d’impression traite un appel SendNotification antérieur, le spouleur d’impression met en file d’attente la notification en attente. Les notifications en file d’attente sont ignorées si le composant hébergé par le spouleur d’impression ou l’application appelle IPrintAsyncNotifyChannel ::CloseChannel.

Pour un canal bidirectionnel, si un appel SendNotification est effectué pendant que le Print-Spooler traite un appel SendNotification antérieur, l’appel en attente échoue. Dans ce cas, si l’appelant est un expéditeur à l’intérieur du spouleur d’impression, SendNotification retourne CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION. Si l’appelant est un écouteur qui envoie une réponse, SendNotification retourne ASYNC_CALL_IN_PROGRESS.

Lorsque plusieurs écouteurs existent pour le même canal bidirectionnel, la notification initiale envoyée sur le canal est remise à tous les écouteurs. Le premier écouteur à répondre acquiert le canal. Les écouteurs appelant SendNotification après l’acquisition du canal échouent avec une erreur CHANNEL_ACQUIRED.

Un écouteur recevant une notification initiale sur un canal bidirectionnel peut ne pas être intéressé par l’acquisition du canal. Dans ce cas, l’écouteur peut appeler la méthode IUnknown ::Release . La méthode IUnknown ::Release n’a pas besoin d’être appelée si les méthodes SendNotification ou IPrintAsyncNotifyChannel ::CloseChannel sont appelées.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau uniquement]
Plateforme cible Windows
En-tête prnasnot.h
DLL Prnasnot.dll

Voir aussi

Interfaces de notification d’impression asynchrone

IPrintAsyncNotifyChannel

Impression