COleMessageFilter-Klasse

Verwaltet die Parallelität, die für die Interaktion von OLE-Anwendungen benötigt wird.

Syntax

class COleMessageFilter : public CCmdTarget

Member

Öffentliche Konstruktoren

Name Beschreibung
COleMessageFilter::COleMessageFilter Erstellt ein COleMessageFilter-Objekt.

Öffentliche Methoden

Name Beschreibung
COleMessageFilter::BeginBusyState Versetzt die Anwendung in den Beschäftigt-Zustand.
COleMessageFilter::EnableBusyDialog Aktiviert und deaktiviert das Dialogfeld, das angezeigt wird, wenn eine aufgerufene Anwendung ausgelastet ist.
COleMessageFilter::EnableNotRespondingDialog Aktiviert und deaktiviert das Dialogfeld, das angezeigt wird, wenn eine aufgerufene Anwendung nicht reagiert.
COleMessageFilter::EndBusyState Beendet den Beschäftigt-Zustand der Anwendung.
COleMessageFilter::OnMessagePending Wird vom Framework aufgerufen, um Nachrichten zu verarbeiten, während ein OLE-Aufruf ausgeführt wird.
COleMessageFilter::Register Registriert den Nachrichtenfilter mit den OLE-System-DLLs.
COleMessageFilter::Revoke Widerruft die Registrierung des Nachrichtenfilters bei den OLE-System-DLLs.
COleMessageFilter::SetBusyReply Bestimmt die Antwort der ausgelasteten Anwendung auf einen OLE-Aufruf.
COleMessageFilter::SetMessagePendingDelay Bestimmt, wie lange die Anwendung auf eine Antwort auf einen OLE-Aufruf wartet.
COleMessageFilter::SetRetryReply Bestimmt die Antwort der aufrufenden Anwendung auf eine ausgelastete Anwendung.

Hinweise

Die COleMessageFilter Klasse ist nützlich bei visuellen Bearbeitungsserver- und Containeranwendungen sowie OLE-Automatisierungsanwendungen. Bei Serveranwendungen, die aufgerufen werden, kann diese Klasse verwendet werden, um die Anwendung "ausgelastet" zu machen, sodass eingehende Anrufe aus anderen Containeranwendungen entweder abgebrochen oder später erneut versucht werden. Diese Klasse kann auch verwendet werden, um die Aktion zu bestimmen, die von einer aufrufenden Anwendung ausgeführt werden soll, wenn die aufgerufene Anwendung ausgelastet ist.

Die allgemeine Verwendung ist für eine Serveranwendung, um BeginBusyState und EndBusyState aufzurufen, wenn es gefährlich wäre, dass ein Dokument oder ein anderes OLE-Objekt zerstört werden kann, auf das zugegriffen werden kann. Diese Aufrufe werden in CWinApp::OnIdle während Aktualisierungen der Benutzeroberfläche ausgeführt.

Standardmäßig wird ein COleMessageFilter Objekt zugewiesen, wenn die Anwendung initialisiert wird. Sie kann mit AfxOleGetMessageFilter abgerufen werden.

Dies ist eine fortgeschrittene Klasse; Sie müssen nur selten direkt damit arbeiten.

Weitere Informationen finden Sie im Artikel Server: Implementieren eines Servers.

Vererbungshierarchie

CObject

CCmdTarget

COleMessageFilter

Anforderungen

Kopfzeile: afxole.h

COleMessageFilter::BeginBusyState

Rufen Sie diese Funktion auf, um einen Beschäftigt-Zustand zu beginnen.

virtual void BeginBusyState();

Hinweise

Es funktioniert in Verbindung mit EndBusyState , um den Beschäftigt-Zustand der Anwendung zu steuern. Die Funktion SetBusyReply bestimmt die Antwort der Anwendung auf aufrufende Anwendungen, wenn sie ausgelastet ist.

Der BeginBusyState Indikator und EndBusyState ruft inkrementell bzw. dekrementiert einen Zähler auf, der bestimmt, ob die Anwendung ausgelastet ist. Beispielsweise führen zwei Aufrufe und BeginBusyState ein Aufruf zu EndBusyState einem beschäftigten Zustand. Zum Abbrechen eines Beschäftigt-Zustands ist es erforderlich, die gleiche Anzahl von Anrufen BeginBusyState anzurufenEndBusyState.

Standardmäßig wechselt das Framework während der Leerlaufverarbeitung in den Beschäftigt-Zustand, der von CWinApp::OnIdle ausgeführt wird. Während die Anwendung ON_COMMANDUPDATEUI Benachrichtigungen verarbeitet, werden eingehende Anrufe später verarbeitet, nachdem die Leerlaufverarbeitung abgeschlossen ist.

COleMessageFilter::COleMessageFilter

Erstellt ein COleMessageFilter-Objekt.

COleMessageFilter();

COleMessageFilter::EnableBusyDialog

Aktiviert und deaktiviert das Beschäftigt-Dialogfeld, das angezeigt wird, wenn die ausstehende Verzögerung der Nachricht abläuft (siehe SetRetryReply) während eines OLE-Aufrufs.

void EnableBusyDialog(BOOL bEnableBusy = TRUE);

Parameter

bEnableBusy
Gibt an, ob das Dialogfeld "beschäftigt" aktiviert oder deaktiviert ist.

COleMessageFilter::EnableNotRespondingDialog

Aktiviert und deaktiviert das Dialogfeld "Nicht reagieren", das angezeigt wird, wenn eine Tastatur- oder Mausnachricht während eines OLE-Anrufs aussteht und der Anruf timeout ist.

void EnableNotRespondingDialog(BOOL bEnableNotResponding = TRUE);

Parameter

bEnableNotResponding
Gibt an, ob das Dialogfeld "Nicht antworten" aktiviert oder deaktiviert ist.

COleMessageFilter::EndBusyState

Rufen Sie diese Funktion auf, um einen Beschäftigt-Zustand zu beenden.

virtual void EndBusyState();

Hinweise

Es funktioniert in Verbindung mit BeginBusyState , um den Beschäftigt-Zustand der Anwendung zu steuern. Die Funktion SetBusyReply bestimmt die Antwort der Anwendung auf aufrufende Anwendungen, wenn sie ausgelastet ist.

Der BeginBusyState Indikator und EndBusyState ruft inkrementell bzw. dekrementiert einen Zähler auf, der bestimmt, ob die Anwendung ausgelastet ist. Beispielsweise führen zwei Aufrufe und BeginBusyState ein Aufruf zu EndBusyState einem beschäftigten Zustand. Zum Abbrechen eines Beschäftigt-Zustands ist es erforderlich, die gleiche Anzahl von Anrufen BeginBusyState anzurufenEndBusyState.

Standardmäßig wechselt das Framework während der Leerlaufverarbeitung in den Beschäftigt-Zustand, der von CWinApp::OnIdle ausgeführt wird. Während die Anwendung ON_UPDATE_COMMAND_UI Benachrichtigungen verarbeitet, werden eingehende Anrufe nach Abschluss der Leerlaufverarbeitung behandelt.

COleMessageFilter::OnMessagePending

Wird vom Framework aufgerufen, um Nachrichten zu verarbeiten, während ein OLE-Aufruf ausgeführt wird.

virtual BOOL OnMessagePending(const MSG* pMsg);

Parameter

pMsg
Zeigen Sie auf die ausstehende Nachricht.

Rückgabewert

Bei Erfolg ein Wert ungleich 0 (null), andernfalls 0 (null).

Hinweise

Wenn eine aufrufende Anwendung auf den Abschluss eines Aufrufs wartet, ruft OnMessagePending das Framework mit einem Zeiger auf die ausstehende Nachricht auf. Standardmäßig verteilt das Framework WM_PAINT Nachrichten, sodass Fensteraktualisierungen während eines Anrufs auftreten können, der lange dauert.

Sie müssen ihren Nachrichtenfilter mithilfe eines Anrufs zur Registrierung registrieren, bevor er aktiv werden kann.

COleMessageFilter::Register

Registriert den Nachrichtenfilter mit den OLE-System-DLLs.

BOOL Register();

Rückgabewert

Bei Erfolg ein Wert ungleich 0 (null), andernfalls 0 (null).

Hinweise

Ein Nachrichtenfilter hat keine Auswirkung, es sei denn, er wird bei den System-DLLs registriert. In der Regel registriert der Initialisierungscode der Anwendung den Nachrichtenfilter der Anwendung. Alle anderen Nachrichtenfilter, die von Ihrer Anwendung registriert sind, sollten widerrufen werden, bevor das Programm durch einen Aufruf von Revoke beendet wird.

Der Standardnachrichtenfilter des Frameworks wird während der Initialisierung automatisch registriert und beim Beenden widerrufen.

COleMessageFilter::Revoke

Widerruft eine vorherige Registrierung, die durch einen Aufruf von Register ausgeführt wird.

void Revoke();

Hinweise

Ein Nachrichtenfilter sollte widerrufen werden, bevor das Programm beendet wird.

Der standardmäßige Nachrichtenfilter, der automatisch vom Framework erstellt und registriert wird, wird ebenfalls automatisch widerrufen.

COleMessageFilter::SetBusyReply

Diese Funktion legt die "Beschäftigt-Antwort" der Anwendung fest.

void SetBusyReply(SERVERCALL nBusyReply);

Parameter

nBusyReply
Ein Wert aus der SERVERCALL Aufzählung, der in COMPOBJ.H definiert ist. Er kann einen der folgenden Werte aufweisen:

  • SERVERCALL_ISHANDLED Die Anwendung kann Aufrufe annehmen, aber bei der Verarbeitung eines bestimmten Anrufs fehlschlagen.

  • SERVERCALL_REJECTED Die Anwendung kann wahrscheinlich nie einen Aufruf verarbeiten.

  • SERVERCALL_RETRYLATER Die Anwendung befindet sich vorübergehend in einem Zustand, in dem ein Aufruf nicht verarbeitet werden kann.

Hinweise

Die Funktionen BeginBusyState und EndBusyState steuern den Beschäftigt-Zustand der Anwendung.

Wenn eine Anwendung mit einem Aufruf BeginBusyStatebeschäftigt wurde, antwortet sie auf Aufrufe aus den OLE-System-DLLs mit einem Wert, der durch die letzte Einstellung von SetBusyReply. Die aufrufende Anwendung verwendet diese Beschäftigt-Antwort, um zu bestimmen, welche Aktion ausgeführt werden soll.

Standardmäßig ist die gebuchte Antwort SERVERCALL_RETRYLATER. Diese Antwort bewirkt, dass die aufrufende Anwendung den Anruf so bald wie möglich erneut versucht.

COleMessageFilter::SetMessagePendingDelay

Bestimmt, wie lange die aufrufende Anwendung auf eine Antwort der aufgerufenen Anwendung wartet, bevor weitere Maßnahmen ergriffen werden.

void SetMessagePendingDelay(DWORD nTimeout = 5000);

Parameter

nTimeout
Die Anzahl der Millisekunden für die ausstehende Verzögerung der Nachricht.

Hinweise

Diese Funktion arbeitet in Abstimmung mit SetRetryReply.

COleMessageFilter::SetRetryReply

Bestimmt die Aktion der aufrufenden Anwendung, wenn sie eine gebuchte Antwort von einer aufgerufenen Anwendung empfängt.

void SetRetryReply(DWORD nRetryReply = 0);

Parameter

nRetryReply
Anzahl der Millisekunden zwischen Wiederholungen.

Hinweise

Wenn eine aufgerufene Anwendung angibt, dass sie ausgelastet ist, kann die aufrufende Anwendung entscheiden, bis der Server nicht mehr ausgelastet ist, sofort versuchen oder nach einem angegebenen Intervall erneut versuchen. Es kann auch entscheiden, den Anruf vollständig abzubrechen.

Die Antwort des Aufrufers wird durch die Funktionen SetRetryReply und SetMessagePendingDelay gesteuert. SetRetryReply bestimmt, wie lange die aufrufende Anwendung zwischen Wiederholungsversuchen für einen bestimmten Aufruf warten soll. SetMessagePendingDelay bestimmt, wie lange die aufrufende Anwendung auf eine Antwort vom Server wartet, bevor weitere Maßnahmen ergriffen werden.

In der Regel sind die Standardwerte akzeptabel und müssen nicht geändert werden. Das Framework wiederholt den Aufruf aller nRetryReply Millisekunden, bis der Aufruf durchläuft oder die ausstehende Nachricht abgelaufen ist. Ein Wert von 0 für nRetryReply gibt einen sofortigen Wiederholungsversuch an, und - 1 gibt den Abbruch des Anrufs an.

Wenn die meldungsbedingte Verzögerung abgelaufen ist, wird das OLE-Dialogfeld "Beschäftigt" (siehe COleBusyDialog) angezeigt, damit der Benutzer den Anruf abbrechen oder wiederholen kann. Rufen Sie EnableBusyDialog auf, um dieses Dialogfeld zu aktivieren oder zu deaktivieren.

Wenn eine Tastatur oder Mausnachricht während eines Anrufs aussteht und der Anruf timeout (die meldungsbedingte Verzögerung überschritten hat), wird das Dialogfeld "Nicht antworten" angezeigt. Rufen Sie EnableNotRespondingDialog auf, um dieses Dialogfeld zu aktivieren oder zu deaktivieren. In der Regel zeigt dieser Zustand an, dass etwas schief gegangen ist und der Benutzer ungeduldig wird.

Wenn die Dialogfelder deaktiviert sind, wird die aktuelle "Wiederholungsantwort" immer für Anrufe an ausgelastete Anwendungen verwendet.

Siehe auch

CCmdTarget-Klasse
Hierarchiediagramm
CCmdTarget-Klasse