Freigeben über


Abrufen eines Zeigers auf ein Objekt

Da COM kein striktes Klassenmodell aufweist, gibt es vier Möglichkeiten, wie ein Client einen Zeiger auf eine Schnittstelle für ein Objekt instanziieren oder abrufen kann:

  • Rufen Sie eine COM-Bibliotheksfunktion auf, die ein Objekt eines vordefinierten Typs erstellt. Das heißt, die Funktion gibt einen Zeiger auf nur eine bestimmte Schnittstelle für eine bestimmte Objektklasse zurück.
  • Rufen Sie eine COM-Bibliotheksfunktion auf, die ein Objekt basierend auf einem Klassenbezeichner (CLSID) erstellen und einen beliebigen Typ von Schnittstellenzeiger zurückgibt, der angefordert wird.
  • Rufen Sie eine Methode einer Schnittstelle auf, die ein anderes -Objekt erstellt (oder eine Verbindung mit einem vorhandenen herstellt) und einen Schnittstellenzeiger für dieses separate Objekt zurückgibt.
  • Implementieren Sie ein -Objekt mit einer Schnittstelle, über die andere Objekte ihren Schnittstellenzeiger direkt an den Client übergeben.

Informationen zum Abrufen von Zeigern auf andere Schnittstellen für ein Objekt nach dem ersten Finden Sie unter QueryInterface: Navigieren in einem Objekt.

Erstellen eines Objekts eines vordefinierten Typs

Es gibt zahlreiche COM-Funktionen, z. B . CoGetMalloc, die Zeiger auf bestimmte Schnittstellenimplementierungen zurückgeben. (CoGetMalloc ruft einen Zeiger auf die COM-Standardspeicherzuweisung ab.) Die meisten dieser Funktionen sind Hilfsfunktionen, und die meisten dieser Funktionen werden in den Referenzabschnitten dieser Dokumentation unter dem spezifischen Bereich beschrieben, auf den sie sich beziehen, z. B. Speicherung oder Datenübertragung.

Erstellen eines Objekts basierend auf einer CLSID

Es gibt mehrere Funktionen, die ein Client bei einer CLSID aufrufen kann, um ein Objekt instance zu erstellen und einen Zeiger darauf zu erhalten. Alle diese Funktionen basieren auf der Funktion CoGetClassObject, die ein Klassenobjekt erstellt und einen Zeiger auf eine Schnittstelle bereitstellt, mit der Sie Instanzen dieser Klasse erstellen können. Es müssen zwar Informationen vorhanden sein, die angibt, auf welchem System sich der Server befindet, aber es ist nicht erforderlich, dass diese Informationen im Client enthalten sind. Der Client muss nur die CLSID und niemals den absoluten Pfad des Servercodes kennen. Weitere Informationen finden Sie unter Erstellen eines Objekts über ein Klassenobjekt.

Zurückgeben eines Zeigers auf ein separates Objekt

Unter den vielen Schnittstellenmethoden, die einen Zeiger auf ein separates Objekt zurückgeben, sind mehrere, die einen Zeiger auf ein Enumeratorobjekt erstellen und zurückgeben, mit dem Sie bestimmen können, wie viele Elemente eines bestimmten Typs ein Objekt verwaltet. COM definiert Schnittstellen zum Auflisten einer Vielzahl von Elementen, z. B. Zeichenfolgen, wichtige Strukturen, Moniker und IUnknown-Schnittstellenzeiger . Die typische Möglichkeit, einen Enumerator instance zu erstellen und einen Zeiger auf die Schnittstelle abzurufen, besteht darin, eine Methode von einer anderen Schnittstelle aufzurufen. Beispielsweise definiert die IDataObject-Schnittstelle zwei Methoden, EnumDAdvise und EnumFormatEtc, die Zeiger auf Schnittstellen für zwei verschiedene Enumerationsobjekte zurückgeben. Es gibt viele weitere Beispiele in COM von Methoden, die Zeiger auf Objekte zurückgeben, z. B. die OLE-Verbunddokumentschnittstelle IOleObject::GetClientSite, die, wenn sie für das eingebettete oder verknüpfte Objekt aufgerufen wird, einen Zeiger auf die Implementierung von IOleClientSite des Containerobjekts zurückgibt.

Implementieren eines Objekts, über das ein Schnittstellenzeiger direkt an den Client übergeben werden soll

Wenn zwei Objekte, z. B. ein OLE-Verbunddokumentcontainer und -Server, bidirektionale Kommunikation benötigen, implementiert jedes ein Objekt, das eine Schnittstellenmethode enthält, über die ein Schnittstellenzeiger an das andere Objekt übergeben werden kann. Das implementierenden Objekt, das auch der Client des erstellten Objekts ist, kann dann die -Methode aufrufen und den übergebenen Zeiger abrufen.

COM-Clients und -Server

COM-Serveraufgaben