Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erstellt einen Kommunikationskanal zwischen einer von Print Spooler gehosteten Druckkomponente, z. B. einem Drucktreiber oder Portmonitor, und einer Anwendung, die Benachrichtigungen von der Komponente empfängt.
Syntax
HRESULT CreatePrintAsyncNotifyChannel(
[in] PCWSTR pszName,
[in] PrintAsyncNotificationType *pNotificationType,
[in] PrintAsyncNotifyUserFilter eUserFilter,
[in] PrintAsyncNotifyConversationStyle eConversationStyle,
[in] IPrintAsyncNotifyCallback *pCallback,
[out] IPrintAsyncNotifyChannel **ppIAsynchNotification
);
Parameter
[in] pszName
Ein Zeiger auf den Namen eines Druckservers oder einer Druckwarteschlange.
[in] pNotificationType
Ein Zeiger auf die GUID des Datenschemas für den Typ der Benachrichtigungen, die im Kanal gesendet werden sollen.
[in] eUserFilter
Ein Wert, der angibt, ob Benachrichtigungen gesendet werden:
- Nur Anwendungen, die als derselbe Benutzer wie der vom Print Spooler gehostete Plug-In-Absender ausgeführt werden.
- Eine breitere Palette von Lauschanwendungen.
[in] eConversationStyle
Ein Wert, der angibt, ob die Kommunikation bidirektional oder unidirektional ist.
[in] pCallback
Ein Zeiger auf ein Objekt, das die lauschende Anwendung verwendet, um die von Print Spooler gehostete Komponente zurückzurufen. Dies sollte NULL sein, wenn die RichtungkUniDirectional ist.
[out] ppIAsynchNotification
Ein Zeiger auf den neuen Kanal.
Rückgabewert
HRESULT | Schweregrad | Bedeutung |
---|---|---|
S_OK | SUCCESS | Die Funktion wurde erfolgreich abgeschlossen. |
CHANNEL_ALREADY_OPENED | ERROR | Der Kanal wurde bereits geöffnet. |
MAX_CHANNEL_COUNT_EXCEEDED | ERROR | Die maximale Anzahl von Lauschanwendungen, die bereits für den angegebenen Benachrichtigungstyp bei der angegebenen Warteschlange oder dem angegebenen Druckserver registriert wurden. Das Standardmaximum ist 10.000. |
Die Rückgabewerte sind COM-Fehlercodes. Da diese Funktion den Vorgang möglicherweise erfolgreich abgeschlossen hat und dennoch 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 zum Auswerten des Rückgabewerts verwendet werden können.
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
}
Weitere Informationen zu COM-Fehlercodes finden Sie unter Fehlerbehandlung.
Weitere mögliche Rückgabewerte finden Sie unter PrintAsyncNotifyError .
Hinweise
Um einen Kanal zu schließen, rufen Sie IPrintAsyncNotifyChannel::CloseChannel auf. IPrintAsyncNotifyChannel::CloseChannel kann jedoch nicht sofort nach dem Aufruf von CreatePrintAsyncNotifyChannel aufgerufen werden.
Rufen Sie nur IPrintAsyncNotifyChannel::Release() auf:
- , wenn es sich um eine explizite Übereinstimmung mit einem früheren IPrintAsyncNotifyChannel::AddRef()-Aufruf handelt.
- , wenn es sich bei dem Kanal um einen uniDirektionalen Kanal handelt und Sie den Zeiger verlassen, der in einem erfolgreichen Aufruf von CreatePrintAsyncNotifyChannel empfangen wurde.
- , wenn Sie nach dem Erstellen eines BiDirectional-Kanals oder in der Implementierung von IPrintNotifyAsyncCallback::OnEventNotify und:
- Sie haben IPrintAsyncNotifyChannel::SendNotification oder IPrintAsyncNotifyChannel::CloseChannel OR nicht aufgerufen.
- Sie haben keinen erneuten Aufruf von IPrintAsyncNotifyChannel::SendNotification oder IPrintAsyncNotifyChannel::CloseChannel wiederholt, bei dem ein Fehler ODER aufgetreten ist.
- Auf der Serverseite haben Sie keinen erneuten Aufruf von IPrintAsyncNotifyChannel::SendNotification wiederholt, der mit dem Rückgabewert NO_LISTENER OR erfolgreich war.
- Auf der Clientseite haben Sie keinen erneuten Aufruf von IPrintAsyncNotifyChannel::SendNotification wiederholt, der mit dem Rückgabewert CHANNEL_ACQUIRED erfolgreich war.
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 |
Bibliothek | Winspool.lib |
DLL | Spoolss.dll |