Freigeben über


IPrintAsyncNotifyChannel::SendNotification-Methode (prnasnot.h)

Sendet eine Benachrichtigung von einer Komponente, die vom Druckspooler gehostet wird, an eine oder mehrere lauschende Anwendungen oder sendet eine Antwort von einer Anwendung zurück an eine Komponente.

Syntax

HRESULT SendNotification(
  [in] IPrintAsyncNotifyDataObject *pData
);

Parameter

[in] pData

Ein Zeiger auf den Inhalt der Benachrichtigung und deren Größe und Typ.

Rückgabewert

HRESULT Schweregrad Bedeutung
S_OK SUCCESS Die Funktion wurde erfolgreich abgeschlossen.
ASYNC_CALL_ALREADY_PARKED ERROR Eine Benachrichtigung kann nicht gesendet werden, weil der Empfänger die vorherige Benachrichtigung nicht genutzt hat.
ASYNC_CALL_IN_PROGRESS ERROR Der Kanal ist mit einer anderen Benachrichtigung oder Antwort ausgelastet.
ASYNC_NOTIFICATION_FAILURE ERROR Keiner der Listener in diesem Kanal ist für den Empfang dieses Benachrichtigungstyps konfiguriert, oder es ist ein Problem beim Zuweisen der Ressourcen aufgetreten, die zum Abschließen dieses Aufrufs erforderlich sind.
CHANNEL_ACQUIRED ERROR Ein anderer Listener hat diesen Kanal erworben. Die Benachrichtigung wurde nicht gesendet. Der ursprüngliche Listener empfängt keine Benachrichtigungen mehr.
CHANNEL_ALREADY_CLOSED ERROR Die Benachrichtigung konnte nicht gesendet werden, weil der Kanal vor diesem Anruf geschlossen wurde.
CHANNEL_NOT_OPENED ERROR Die Benachrichtigung konnte nicht gesendet werden, weil der Kanal vor diesem Anruf nicht geöffnet wurde.
CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION ERROR Eine Benachrichtigung kann nicht gesendet werden, da keine Antwort auf die letzte Benachrichtigung empfangen wurde.
INVALID_NOTIFICATION_TYPE ERROR Der angegebene Benachrichtigungstyp ist ungültig.
MAX_NOTIFICATION_SIZE_EXCEEDED ERROR Die maximale Größe der Benachrichtigungsdaten wurde überschritten. Standardmäßig beträgt die maximal zulässige Datengröße 10 Megabyte.
NO_LISTENERS SUCCESS Gibt an, dass keine registrierten Lauschanwendungen vorhanden sind.
UNIRECTIONAL_NOTIFICATION_LOST SUCCESS Mindestens ein Listener hat diese Benachrichtigung nicht erhalten, aber mindestens ein Listener hat diese Benachrichtigung erhalten.
 

Die Rückgabewerte sind COM-Fehlercodes. Da diese Funktion den Vorgang möglicherweise erfolgreich abgeschlossen hat, aber ein anderes HRESULT als S_OK sollten Sie das Makro SUCCEEDED oder FAILED verwenden, um den Erfolg des Aufrufs zu bestimmen. Verwenden Sie das Makro HRESULT_CODE, um das spezifische HRESULT abzurufen, das von der Funktion zurückgegeben wurde. Das folgende Codebeispiel zeigt, wie diese Makros verwendet werden können.

Weitere mögliche Rückgabewerte finden Sie unter PrintAsyncNotifyError .

Weitere Informationen zu COM-Fehlercodes finden Sie unter Fehlerbehandlung.

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

Hinweise

Wenn bei einem unidirektionalen Kanal ein SendNotification-Aufruf erfolgt, während der Druckspooler einen früheren SendNotification-Aufruf verarbeitet, wird die ausstehende Benachrichtigung vom Druckspooler in die Warteschlange gestellt. Benachrichtigungen in der Warteschlange werden verworfen, wenn entweder die vom Druckspooler gehostete Komponente oder die Anwendung IPrintAsyncNotifyChannel::CloseChannel aufruft.

Wenn für einen bidirektionalen Kanal ein SendNotification-Aufruf ausgeführt wird, während die Print-Spooler einen früheren SendNotification-Aufruf verarbeitet, schlägt der ausstehende Aufruf fehl. Wenn der Aufrufer in diesem Fall ein Absender innerhalb des Druckspoolers ist, gibt SendNotification CHANNEL_WAITING_FOR_CLIENT_NOTIFICATION zurück. Wenn der Aufrufer ein Listener ist, der eine Antwort sendet, gibt SendNotification ASYNC_CALL_IN_PROGRESS zurück.

Wenn mehrere Listener für denselben bidirektionalen Kanal vorhanden sind, wird die anfängliche Benachrichtigung, die über den Kanal gesendet wird, an alle Listener übermittelt. Der erste Listener, der antwortet, ruft den Kanal ab. Listener, die SendNotification aufrufen, nachdem der Kanal abgerufen wurde, schlagen mit einem Fehler CHANNEL_ACQUIRED fehl.

Ein Listener, der eine erste Benachrichtigung in einem bidirektionalen Kanal empfängt, ist möglicherweise nicht am Abrufen des Kanals interessiert. In diesem Fall kann der Listener die IUnknown::Release-Methode aufrufen. Die IUnknown::Release-Methode muss nicht aufgerufen werden, wenn die Methoden SendNotification oder IPrintAsyncNotifyChannel::CloseChannel aufgerufen werden.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile prnasnot.h
DLL Prnasnot.dll

Weitere Informationen

Benachrichtigungsschnittstellen für asynchrones Drucken

IPrintAsyncNotifyChannel

Drucken