IMoniker-Schnittstelle (objidl.h)

Ermöglicht die Verwendung eines Moniker-Objekts, das Informationen enthält, die ein COM-Objekt eindeutig identifizieren. Ein Objekt, das über einen Zeiger auf die IMoniker-Schnittstelle des Moniker-Objekts verfügt, kann das identifizierte Objekt suchen, aktivieren und darauf zugreifen, ohne über andere spezifische Informationen darüber zu verfügen, wo sich das Objekt tatsächlich in einem verteilten System befindet.

Moniker werden als Grundlage für die Verknüpfung in COM verwendet. Ein verknüpftes Objekt enthält einen Moniker, der seine Quelle identifiziert. Wenn der Benutzer das verknüpfte Objekt zum Bearbeiten aktiviert, ist der Moniker gebunden; Dadurch wird die Linkquelle in den Arbeitsspeicher geladen.

Vererbung

Die IMoniker-Schnittstelle erbt von IPersistStream. IMoniker verfügt auch über folgende Arten von Mitgliedern:

Methoden

Die IMoniker-Schnittstelle verfügt über diese Methoden.

 
IMoniker::BindToObject

Bindet an das angegebene Objekt. Der Bindungsprozess umfasst das Suchen des Objekts, versetzt es bei Bedarf in den Ausführungszustand und stellt dem Aufrufer einen Zeiger auf eine angegebene Schnittstelle für das identifizierte Objekt bereit.
IMoniker::BindToStorage

Bindet an den Speicher für das angegebene Objekt. Im Gegensatz zur IMoniker::BindToObject-Methode aktiviert diese Methode das vom Moniker identifizierte Objekt nicht.
IMoniker::CommonPrefixWith

Erstellt einen neuen Moniker basierend auf dem Präfix, das dieser Moniker mit dem angegebenen Moniker gemeinsam hat.
IMoniker::ComposeWith

Erstellt einen neuen zusammengesetzten Moniker, indem der aktuelle Moniker mit dem angegebenen Moniker kombiniert wird.
IMoniker::Enum

Ruft einen Zeiger auf einen Enumerator für die Komponenten eines zusammengesetzten Monikers ab.
IMoniker::GetDisplayName

Ruft den Anzeigenamen für den Moniker ab.
IMoniker::GetTimeOfLastChange

Ruft den Zeitpunkt ab, zu dem das von diesem Moniker identifizierte Objekt zuletzt geändert wurde.
IMoniker::Hash

Erstellt einen Hashwert unter Verwendung des internen Zustands des Monikers.
IMoniker::Inverse

Erstellt einen Moniker, der die Inverse dieses Monikers ist. Wenn er rechts von diesem Moniker oder einer ähnlichen Struktur zusammengesetzt ist, wird der Moniker in nichts komponiert.
IMoniker::Isequal

Bestimmt, ob dieser Moniker mit dem angegebenen Moniker identisch ist.
IMoniker::IsRunning

Bestimmt, ob das von diesem Moniker identifizierte Objekt derzeit geladen und ausgeführt wird.
IMoniker::IsSystemMoniker

Bestimmt, ob dieser Moniker eine der vom System bereitgestellten Monikerklassen ist.
IMoniker::P arseDisplayName

Konvertiert einen Anzeigenamen in einen Moniker.
IMoniker::Reduce

Reduziert einen Moniker auf seine einfachste Form.
IMoniker::RelativePathTo

Erstellt einen relativen Moniker zwischen diesem Moniker und dem angegebenen Moniker.

Hinweise

Wie ein Pfad zu einer Datei in einem Dateisystem enthält ein Moniker Informationen, mit denen ein COM-Objekt gefunden und aktiviert werden kann. Monikers können jeden Typ von COM-Objekten identifizieren, von einem dokumentobjekt, das in einer Datei gespeichert ist, bis hin zu einer Auswahl innerhalb eines eingebetteten Objekts. COM stellt eine Reihe von Monikerklassen bereit, mit denen Sie Moniker-Objekte erstellen können, die die objekte identifizieren, die am häufigsten im System gefunden werden. Beispielsweise kann es ein Objekt geben, das einen Zellbereich in einer Kalkulationstabelle darstellt, der selbst in ein in einer Datei gespeichertes Textdokument eingebettet ist. In einem verteilten System würde der Moniker dieses Objekts den Speicherort des Systems des Objekts, den physischen Speicherort der Datei auf diesem System, den Speicher des eingebetteten Objekts innerhalb dieser Datei und schließlich den Speicherort des Zellbereichs innerhalb des eingebetteten Objekts identifizieren.

Ein Moniker-Objekt unterstützt die IMoniker-Schnittstelle , die von der IPersistStream-Schnittstelle abgeleitet wird und ein einzelnes Objekt im System eindeutig identifiziert. Nachdem ein Objekt, das einen Moniker bereitstellt, das Moniker-Objekt erstellt hat, können diese Informationen nicht innerhalb dieses Objekts geändert werden. Wenn der Monikeranbieter die Informationen ändert, kann er dies nur tun, indem er ein neues Moniker-Objekt erstellt, das dann das betreffende Objekt eindeutig identifiziert.

Moniker verfügen über die folgenden zwei wichtigen Funktionen:

  • Moniker können in einem persistenten Speicher gespeichert werden. Wenn ein Moniker wieder in den Arbeitsspeicher geladen wird, identifiziert er weiterhin dasselbe Objekt.
  • Monikers unterstützen einen Vorgang namens Bindung. Hierbei handelt es sich um den Prozess, das vom Moniker benannte Objekt zu suchen, es zu aktivieren (es in den Arbeitsspeicher zu laden), falls es noch nicht aktiv ist, und einen Zeiger auf eine angeforderte Schnittstelle für dieses Objekt zurückzugeben.

Antimoniker-Implementierung

Antimoniker sind die Umkehrung der COM-Implementierungen von Datei-, Element- und Zeigermonikern. Das heißt, ein Antimoneiker, der rechts von einem Dateimoniker, Itemmoniker oder Zeigermoniker zusammengesetzt ist, setzt sich in nichts zusammen.

Wenn Sie ein Moniker-Client sind, müssen Sie in der Regel keine Antimoniker verwenden. Wenn Sie die Inverse eines Monikers benötigen, sollten Sie IMoniker::Inverse aufrufen. Wenn Sie beispielsweise eine Inverse benötigen, um das letzte Stück eines zusammengesetzten Monikers zu entfernen, verwenden Sie IMoniker::Enum , um die Teile des Monikers aufzulisten, und rufen Sie Inverse auf der rechten Seite auf. Sie sollten zu diesem Zweck keinen Antimoniker verwenden, da Sie nicht sicher sein können, dass das rechtste Stück eines Komposits einen Antimoneiker als seine Inverse betrachtet.

Die einzige Situation, in der Sie explizit einen Antimoniker verwenden sollten, ist, wenn Sie eine neue Monikerklasse schreiben und keine besonderen Anforderungen für die Erstellung von Inversen zu Ihren Monikern haben. In dieser Situation können Sie Antimoniker aus Ihrer Implementierung von Inverse zurückgeben. In Ihrer Implementierung von IMoniker::ComposeWith sollten Sie dann einen Ihrer Moniker für jeden Antimoniker, dem Sie begegnen, vernichten.

Verwenden Sie die Funktion CreateAntiMoniker , um diese Moniker zu erstellen.

Implementierung von Class Moniker

Klassenmoniker sind Moniker, die eine Objektklasse darstellen. Klassenmoniker binden an das Klassenobjekt der Klasse, für die sie erstellt werden.

Klassenmoniker sind am nützlichsten bei der Komposition mit anderen Monikertypen, z. B. Dateimonikern oder Elementmonikern. Klassenmoniker können auch rechts von Monikern zusammengesetzt werden, die die Bindung an die IClassActivator-Schnittstelle unterstützen. Dadurch kann IClassActivator zugriff auf das Klassenobjekt und die Instanzen der -Klasse bereitstellen.

Um Klassenmoniker zu verwenden, müssen Sie die CreateClassMoniker-Funktion verwenden, um diese Moniker zu erstellen.

File Moniker-Implementierung

Dateimoniker sind Moniker, die einen Pfad im Dateisystem darstellen. Ein Dateimoniker kann jedes Objekt identifizieren, das in seiner eigenen Datei gespeichert ist. Um Objekte zu identifizieren, die in einer Datei enthalten sind, können Sie Moniker anderer Klassen (z. B. Elementmoniker) rechts neben einem Dateimoniker erstellen. Der Moniker links von einem Dateimoniker in einem Zusammengesetzten muss jedoch ein anderer Dateimoniker, ein Antimoniker oder ein Klassenmoniker sein. Es ist beispielsweise unzulässig, dass ein Elementmoniker links neben einem Dateimoniker in einem Zusammengesetzten angezeigt wird.

Beachten Sie, dass ein Antimoniker die Inverse eines gesamten Dateimonikers ist, nicht die Umkehrung einer Komponente des Pfads, den der Moniker darstellt; Das heißt, wenn Sie rechts neben einem Dateimoniker einen Antimoniker erstellen, wird der gesamte Dateimoniker entfernt. Wenn Sie nur die rechtsste Komponente des Pfads entfernen möchten, der durch einen Dateimoniker dargestellt wird, müssen Sie einen separaten Dateimoniker basierend auf dem Pfad ".." erstellen und diesen dann am Ende des Dateimonikers erstellen.

Ein Moniker-Client (der einen Moniker verwendet, um einen Schnittstellenzeiger auf ein Objekt abzurufen) muss in der Regel nicht die Klasse des Monikers kennen. Sie kann einfach Methoden mit einem IMoniker-Schnittstellenzeiger aufrufen.

Ein Monikeranbieter (der Moniker ausgibt, die seine Objekte identifizieren, um sie für Moniker-Clients zugänglich zu machen) muss Dateimoniker verwenden, wenn die von ihm identifizierten Objekte in Dateien gespeichert werden. Wenn sich jedes Objekt in einer eigenen Datei befindet, sind Dateimoniker der einzige typ, der benötigt wird. Wenn die identifizierten Objekte kleiner als eine Datei sind, müssen Sie zusätzlich zu Dateimonikern einen anderen Monikertyp (z. B. Elementmoniker) verwenden.

Um Dateimoniker zu verwenden, müssen Sie die Funktion CreateFileMoniker verwenden, um die Moniker zu erstellen. Damit Ihre Objekte geladen werden können, wenn ein Dateimoniker gebunden ist, müssen Ihre Objekte die IPersistFile-Schnittstelle implementieren.

Das häufigste Beispiel für Monikeranbieter sind COM-Serveranwendungen, die Verknüpfungen unterstützen. Wenn Ihre COM-Serveranwendung nur die Verknüpfung mit dateibasierten Dokumenten in ihrer Gesamtheit unterstützt, sind Dateimoniker der einzige Monikertyp, den Sie benötigen. Wenn Ihre COM-Serveranwendung das Verknüpfen von Objekten unterstützt, die kleiner als ein Dokument sind (z. B. Abschnitte eines Dokuments oder eingebettete Objekte), müssen Sie Sowohl Elementmoniker als auch Dateimoniker verwenden.

Generische Zusammengesetzte Moniker-Implementierung

Ein generischer zusammengesetzter Moniker ist ein zusammengesetzter Moniker, dessen Komponenten keine besonderen Kenntnisse übereinander haben.

Komposition ist der Prozess der Verbindung zweier Moniker. Manchmal können zwei Moniker bestimmter Klassen auf besondere Weise kombiniert werden; Beispielsweise können ein Dateimoniker, der einen unvollständigen Pfad darstellt, und ein anderer Dateimoniker, der einen relativen Pfad darstellt, kombiniert werden, um einen einzelnen Dateimoniker zu bilden, der den vollständigen Pfad darstellt. Dies ist ein Beispiel für eine nichtgenerische Zusammensetzung. Generische Komposition hingegen kann zwei beliebige Moniker verbinden, unabhängig davon, welche Klassen sie haben. Da eine nicht generische Komposition von der Klasse der beteiligten Moniker abhängt, kann sie nur durch die Implementierung der IMoniker::ComposeWith-Methode einer bestimmten Klasse ausgeführt werden. Sie können neue Typen von nicht generischen Kompositionen definieren, wenn Sie eine neue Monikerklasse schreiben. Im Gegensatz dazu werden generische Kompositionen von der CreateGenericComposite-Funktion ausgeführt.

Ein Monikerclient (der einen Moniker verwendet, um einen Schnittstellenzeiger auf ein Objekt abzurufen) muss in der Regel nicht die Klasse des Monikers kennen oder ob es sich um einen generischen zusammengesetzten oder einen nicht generischen Zusammengesetzten handelt. Sie kann methoden einfach mit einem IMoniker-Schnittstellenzeiger aufrufen.

Ein Monikeranbieter (der Moniker ausgibt, die seine Objekte identifizieren, um sie für Monikerclients zugänglich zu machen) muss möglicherweise zwei Moniker zusammensetzen. (Wenn Sie beispielsweise einen Elementmoniker verwenden, um ein Objekt zu identifizieren, müssen Sie es mit dem Moniker verfassen, der den Container des Objekts identifiziert, bevor Sie es aushändigen.) Verwenden Sie dazu die IMoniker::ComposeWith-Methode , indem Sie die -Methode für den ersten Moniker aufrufen und den zweiten Moniker als Parameter übergeben. Diese Methode kann entweder einen generischen oder einen nicht generischen Zusammengesetzten erzeugen.

Sie sollten nur explizit einen generischen zusammengesetzten Moniker erstellen, wenn Sie Ihre eigene Monikerklasse schreiben. In Ihrer Implementierung von IMoniker::ComposeWith sollten Sie versuchen, nach Möglichkeit eine nicht generische Komposition auszuführen; Wenn Sie keine nicht generische Komposition ausführen können und eine generische Komposition akzeptabel ist, können Sie die CreateGenericComposite-Funktion aufrufen, um einen generischen zusammengesetzten Moniker zu erstellen.

Item Moniker-Implementierung

Elementmoniker werden verwendet, um Objekte in Containern zu identifizieren, z. B. einen Teil eines Dokuments, ein eingebettetes Objekt in einem zusammengesetzten Dokument oder einen Zellbereich innerhalb einer Kalkulationstabelle. Item Moniker werden häufig in Kombination mit Dateimonikern verwendet; Ein Dateimoniker wird verwendet, um den Container zu identifizieren, während ein Elementmoniker verwendet wird, um das Element innerhalb des Containers zu identifizieren.

Ein Elementmoniker enthält eine Textzeichenfolge. Diese Zeichenfolge wird vom Containerobjekt verwendet, um das enthaltene Element von den anderen zu unterscheiden. Das Containerobjekt muss die IOleItemContainer-Schnittstelle implementieren. Diese Schnittstelle ermöglicht es dem Elementmonikercode, einen Zeiger auf ein Objekt zu erhalten, wobei nur die Zeichenfolge angegeben wird, die das Objekt identifiziert.

Ein Monikerclient (der einen Moniker verwendet, um einen Schnittstellenzeiger auf ein Objekt abzurufen) muss in der Regel die Klasse des Monikers nicht kennen. Sie ruft einfach Methoden mithilfe eines IMoniker-Schnittstellenzeigers auf.

Ein Monikeranbieter (der Moniker ausgibt, die seine Objekte identifizieren, um sie für Monikerclients zugänglich zu machen) muss Elementmoniker verwenden, wenn die identifizierten Objekte in einem anderen Objekt enthalten sind und mithilfe einer Zeichenfolge einzeln identifiziert werden können. Verwenden Sie einen anderen Monikertyp (z. B. Dateimoniker), um das Containerobjekt zu identifizieren.

Um Elementmoniker verwenden zu können, müssen Sie die CreateItemMoniker-Funktion verwenden, um die Moniker zu erstellen. Damit Ihre Objekte geladen werden können, wenn ein Elementmoniker gebunden ist, muss der Container Ihrer Objekte die IOleItemContainer-Schnittstelle implementieren.

Das häufigste Beispiel für Monikeranbieter sind COM-Anwendungen, die Verknüpfungen unterstützen. Wenn Ihre COM-Anwendung das Verknüpfen von Objekten unterstützt, die kleiner als ein dateibasiertes Dokument sind, müssen Sie Elementmoniker verwenden. Für eine Serveranwendung, die eine Verknüpfung mit einer Auswahl innerhalb eines Dokuments ermöglicht, verwenden Sie die Elementmoniker, um diese Objekte zu identifizieren. Für eine Containeranwendung, die das Verknüpfen mit eingebetteten Objekten ermöglicht, verwenden Sie die Elementmoniker, um die eingebetteten Objekte zu identifizieren.

OBJREF Moniker-Implementierung

OBJREF-Moniker stellen einen Verweis auf ein Objekt instance dar, das lokal oder remote auf einem Out-of-Process-Server ausgeführt wird. Der Moniker identifiziert das Objekt instance und den Computer, auf dem das Objekt ausgeführt wird.

Ein OBJREF-Moniker ähnelt in vielerlei Hinsicht einem Zeigermoniker, mit der Ausnahme, dass das ausgeführte Objekt außerhalb des Prozesses liegt. Ein Client kann IMoniker::BindToObject für einen OBJREF-Moniker aufrufen und den abgerufenen Zeiger verwenden, um unabhängig vom Speicherort auf das ausgeführte Objekt zuzugreifen.

Ein wichtiger Unterschied zu einem Zeigermoniker besteht darin, dass der Anzeigename eines OBJREF-Monikers in eine HTML-Seite eingebettet werden kann und das ausgeführte Objekt, das durch den Moniker dargestellt wird, durch ein Clientskript, applet oder ActiveX-Steuerelement gebunden werden kann.

Die primäre Verwendung eines OBJREF-Monikers besteht darin, Zugriff auf ein ausgeführtes Objekt instance über das Internet zu erhalten. Eine aktive Serverseite oder ein anderes Mittel zum Generieren dynamischer HTML-Inhalte platziert den Anzeigenamen eines OBJREF-Monikers in einem Parameter in ein Applet oder ein ActiveX-Steuerelement. Der Code des Applets oder Steuerelements ruft die CreateObjrefMoniker-Funktion auf, um einen OBJREF-Moniker basierend auf dem Anzeigenamen zu erstellen. Anschließend wird IMoniker::BindToObject für den resultierenden OBJREF-Moniker aufgerufen, um Zugriff auf das ausgeführte Objekt instance zu erhalten. Die aktive Serverseite marshallt dann einen Zeiger auf das ausgeführte Objekt zurück an den Client der Seite.

Implementierung von Zeigermoniker

Ein Zeigermoniker umschließt im Wesentlichen einen Schnittstellenzeiger, sodass er wie ein Moniker aussieht und an die Schnittstellen übergeben werden kann, die Moniker erfordern. Das Binden eines Zeigermonikers erfolgt durch Aufrufen der QueryInterface-Methode des Zeigers.

Instanzen von Zeigermonikern weigern sich, serialisiert zu werden; Das heißt, IPersistStream::Save gibt einen Fehler zurück. Diese Moniker können jedoch in einem RPC-Aufruf an einen anderen Prozess gemarshallt werden. intern marshallt und entmarshaliert das System den Zeiger mithilfe des Standardparadigmas zum Marshallen von Schnittstellenzeigern.

Zeigermoniker werden selten benötigt. Verwenden Sie Zeigermoniker nur, wenn Sie Moniker benötigen, um Objekte zu identifizieren, die keine persistente Darstellung haben. Zeigermoniker ermöglichen es solchen Objekten, an einem Monikerbindungsvorgang teilzunehmen.

URL Moniker-Implementierung

Die URL-Monikerimplementierung von IMoniker befindet sich in einem URL-Moniker-Objekt, das auch IUnknown und die IAsyncMoniker-Schnittstelle unterstützt. Die IMoniker-Schnittstelle erbt ihre Definition von IPersistStream sowie IUnknown, und IPersistStream erbt von IPersist. Daher umfasst die IMoniker-Implementierung Unterstützung für IPersistStream und IPersist.

Die IAsyncMoniker-Schnittstelle ist einfach IUnknown. (Es gibt keine zusätzlichen Methoden.) Es wird verwendet, um Clients zu ermöglichen, zu bestimmen, ob ein Moniker die asynchrone Bindung unterstützt.

Um einen Zeiger auf die IMoniker-Schnittstelle für dieses Objekt abzurufen, rufen Sie die CreateURLMonikerEx-Funktion auf.

Ein Monikerclient (der einen Moniker verwendet, um einen Schnittstellenzeiger auf ein Objekt abzurufen) muss in der Regel die Klasse des verwendeten Monikers nicht kennen. Es ruft einfach Methoden mithilfe eines IMoniker-Schnittstellenzeigers auf.

Ein Monikeranbieter (der Moniker ausgibt, die seine Objekte identifizieren, um sie für Monikerclients zugänglich zu machen) muss Elementmoniker verwenden, wenn die identifizierten Objekte in einem anderen Objekt enthalten sind und mithilfe einer Zeichenfolge einzeln identifiziert werden können. Außerdem muss ein anderer Monikertyp (z. B. Dateimoniker) verwendet werden, um das Containerobjekt zu identifizieren.

Um Elementmoniker verwenden zu können, müssen Sie die CreateItemMoniker-Funktion verwenden, um die Moniker zu erstellen. Damit Ihre Objekte geladen werden können, wenn ein Elementmoniker gebunden ist, muss der Container Ihrer Objekte die IOleItemContainer-Schnittstelle implementieren.

Das häufigste Beispiel für Monikeranbieter sind COM-Anwendungen, die Verknüpfungen unterstützen. Wenn Ihre COM-Anwendung das Verknüpfen von Objekten unterstützt, die kleiner als dateibasierte Dokumente sind, müssen Sie Elementmoniker verwenden. Für eine Serveranwendung, die eine Verknüpfung mit einer Auswahl innerhalb eines Dokuments ermöglicht, verwenden Sie die Elementmoniker, um diese Objekte zu identifizieren. Für eine Containeranwendung, die das Verknüpfen mit eingebetteten Objekten ermöglicht, verwenden Sie die Elementmoniker, um die eingebetteten Objekte zu identifizieren.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile objidl.h

Weitere Informationen

CreateAntiMoniker

CreateClassMoniker

CreateFileMoniker

CreateGenericComposite

CreateItemMoniker

CreateObjrefMoniker

CreateURLMonikerEx

Moniker