Der OLE-Handler

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

Die OLE-Handlerkomponenten umfassen Remotingelemente zum Verwalten der Kommunikation zwischen dem Handler und dem Server, einen Cache zum Speichern der Daten eines Objekts (zusammen mit Informationen zur Formatierung und Anzeige dieser Daten) 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 speicherort der Linkquelle nachverfolgt.

OLE stellt einen Standardhandler zur Verfügung, 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 teile der Funktionalität verwenden, die er bei Bedarf bietet. Im letzteren Fall wird der Anwendungshandler als Aggregatobjekt implementiert, das aus einem neuen Steuerelementobjekt und dem Standardhandler besteht. Kombinationsanwendungs-/Standardhandler werden auch als In-Process-Handler bezeichnet. Der Remotinghandler wird für Objekte verwendet, denen in der Systemregistrierung keine CLSID zugewiesen ist oder die keinen angegebenen Handler haben. Von einem Handler für diese Objekttypen ist nur die Übergeben von Informationen über die Prozessgrenze erforderlich. Um eine neue Instanz des Standardhandlers zu erstellen, rufen Sie OleCreateDefaultHandler auf. Rufen Sie unter bestimmten Umständen OleCreateEmbeddingHelper auf.

Wenn Sie eine Instanz eines Handlers für eine Klasse erstellen, können Sie sie nicht für eine andere verwenden. Bei Verwendung für ein zusammengesetztes Dokument 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 hat eine Reihe von Schnittstellen implementiert, die vom typischen Server nicht implementiert wurden. Als OLE anschließend Prozessserver für Verbunddokumente zustellte, mussten sie ein Einbettungs-Hilfsfeld erstellen, 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 denselben Gründen ein entsprechendes In-Process-Hilfsfeld bereitstellen. Auch wenn die Designer derzeit keine Schnittstellen für den Handler implementieren, die die Server nicht verfügbar machen, möchten sie möglicherweise jetzt ein Hilfsroutine definieren, damit sie sie in Zukunft hinzufügen können. Alternativ können Sie die zusätzlichen Schnittstellen für das Serverobjekt selbst implementieren.

Der LightweightClient-Side Handler