Auf Englisch lesen

Freigeben über


Der OLE-Handler

Ein OLE-Handler ist eine DLL, die mehrere interagierende Komponenten enthält, die zum Verknüpfen und Einbetten verwendet werden. Um den Aufwand einer konstanten prozessübergreifenden Kommunikation zwischen einem Container und seinem Server zu vermeiden, wird der Handler in den Prozessbereich des Containers geladen, um im Namen eines Servers als eine Art Ersatzprozess zu handeln. Der OLE-Handler verwaltet Containeranforderungen, die nicht die Aufmerksamkeit der Serveranwendung erfordern, z. B. Zeichnungsanforderungen. Wenn ein Container etwas anfordert, das vom Objekthandler nicht bereitgestellt werden kann, kommuniziert der Handler mit der Serveranwendung mithilfe des Com-Out-of-Process-Kommunikationsmechanismus.

Die OLE-Handlerkomponenten umfassen Remotingelemente zum Verwalten der Kommunikation zwischen dem Handler und seinem Server, einen Cache zum Speichern der Daten eines Objekts (zusammen mit Informationen dazu, wie diese Daten formatiert und angezeigt werden sollen) und ein steuernde Objekt, das die Aktivitäten der anderen KOMPONENTEN der DLL koordiniert. Wenn ein Objekt ein Link ist, enthält die DLL auch eine Verknüpfungskomponente oder ein verknüpftes Objekt, das den Namen und den Speicherort der Linkquelle nachverfolgt.

OLE stellt einen Standardhandler bereit, den die meisten Anwendungen zum Verknüpfen und Einbetten verwenden. Wenn die Standardeinstellung nicht den Anforderungen Ihres Servers entspricht, können Sie entweder den Standardhandler vollständig ersetzen oder ggf. Teile der bereitgestellten Funktionalität verwenden. Im letzteren Fall wird der Anwendungshandler als Aggregatobjekt implementiert, das aus einem neuen Steuerelementobjekt und dem Standardhandler besteht. Kombinationsanwendungs-/Standardhandler werden auch als prozessinterne Handler bezeichnet. Der Remotinghandler wird für Objekte verwendet, denen in der Systemregistrierung keine CLSID zugewiesen ist oder die keinen angegebenen Handler haben. Alles, was von einem Handler für diese Objekttypen benötigt wird, ist, dass sie Informationen über die Prozessgrenze übergeben. Rufen Sie OleCreateDefaultHandler auf, um eine neue instance des Standardhandlers zu erstellen. Rufen Sie für einige besondere Umstände OleCreateEmbeddingHelper auf.

Wenn Sie eine instance eines Handlers für eine Klasse erstellen, können Sie ihn nicht für eine andere Klasse verwenden. Bei Verwendung für ein Verbunddokument implementiert der OLE-Handler die containerseitigen Datenstrukturen, wenn remote auf Objekte einer bestimmten Klasse zugegriffen wird.

OLE hat den Standardhandler für Clients von lokalen Verbunddokumentservern definiert. Der Standardhandler implementierte eine Reihe von Schnittstellen, die vom typischen Server nicht ausgeführt wurden. Wenn OLE anschließend prozessinterne Server für Verbunddokumente zuließ, musste ein Einbettungshilfsprogramm erstellt werden, das diese zusätzlichen Schnittstellen implementierte, damit Clients nahtlos mit ihnen arbeiten konnten.

Framework-Designer, die einen clientseitigen Handler definieren und implementieren, sollten dieses Problem in ihrem Entwurf berücksichtigen und aus den gleichen Gründen einen gleichwertigen Prozesshilfsprogramm bereitstellen. Auch wenn die Designer derzeit keine Schnittstellen für den Handler implementieren, die die Server nicht verfügbar machen, können sie jetzt ein Hilfsprogramm definieren, damit sie sie in Zukunft hinzufügen können. Alternativ könnte man die zusätzlichen Schnittstellen im Serverobjekt selbst implementieren.

Der einfache Client-Side-Handler