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.
Important
Bevorzugter moderner Ansatz – agile Verweise (Windows 8.1+): Verwenden Sie für neuen Code RoGetAgileReference und die IAgileReference Schnittstelle anstelle der globalen Schnittstellentabelle (GIT). Agile Verweise sind einfacher, sicherer und in WinRT und C++/WinRT besser integriert:
#include <wrl.h>
using namespace Microsoft::WRL;
// Store an agile reference that can be resolved from any apartment
ComPtr<IAgileReference> agileRef;
HRESULT hr = RoGetAgileReference(
AGILEREFERENCE_DEFAULT,
__uuidof(IMyInterface),
pMyObject,
&agileRef);
// Later, from any apartment:
ComPtr<IMyInterface> pResolved;
hr = agileRef->Resolve(__uuidof(IMyInterface), &pResolved);
// pResolved is a direct pointer (same apartment) or a proxy (different apartment)
Die GIT bleibt für Legacycode nützlich oder wenn Sie Schnittstellen dynamisch in vielen Wohnungen registrieren/widerrufen müssen.
COM bietet eine Möglichkeit für jede Wohnung in einem Prozess, zugriff auf eine Schnittstelle zu erhalten, die auf einem Objekt in allen anderen Wohnungen im Prozess implementiert ist. Dies erfolgt über die IGlobalInterfaceTable-Schnittstelle . Diese Schnittstelle verfügt über drei Methoden, mit denen Sie folgende Aktionen ausführen können:
- Registrieren Sie eine Schnittstelle als globale (prozessweite) Schnittstelle.
- Rufen Sie einen Zeiger auf diese Schnittstelle von allen anderen Apartments über ein Cookie ab.
- Widerrufen der globalen Registrierung einer Schnittstelle.
Die IGlobalInterfaceTable-Schnittstelle ist eine effiziente Möglichkeit, mit der ein Prozess einen Schnittstellenzeiger in einem Speicherbereich speichern kann, auf den aus mehreren Apartments innerhalb des Prozesses zugegriffen werden kann, z. B. in prozessweiten Variablen und agilen Objekten (Free-Threaded-, gemarshallte Objekte), die Schnittstellenzeiger auf andere Objekte enthalten.
Ein agiles Objekt kennt die zugrunde liegende COM-Infrastruktur, in der es ausgeführt wird, nicht; mit anderen Worten: in welchem Apartment, Kontext und Thread es ausgeführt wird. Das Objekt kann sich an Schnittstellen halten, die spezifisch für eine Wohnung oder einen Kontext sind. Aus diesem Grund funktioniert das Aufrufen dieser Schnittstellen von überall aus, wo die agile Komponente ausgeführt wird, möglicherweise nicht immer ordnungsgemäß. Die globale Schnittstellentabelle vermeidet dieses Problem, indem sichergestellt wird, dass ein gültiger Proxy (oder direkter Zeiger) auf das Objekt verwendet wird, basierend darauf, wo das agile Objekt ausgeführt wird.
Note
Die globale Schnittstellentabelle ist nicht über Prozess- oder Computergrenzen hinweg portierbar, sodass sie nicht anstelle des normalen Mechanismus für die Parameterübergabe verwendet werden kann.
Informationen zum Erstellen und Verwenden einer globalen Schnittstellentabelle finden Sie in den folgenden Themen:
- Erstellen der globalen Schnittstellentabelle
- Gründe für die Verwendung der globalen Schnittstellentabelle
Zugehörige Themen