Freigeben über


Hilfsfunktionen für die Instanzerstellung

In früheren Versionen von COM war der primäre Mechanismus zum Erstellen einer Objektinstanz die CoCreateInstance-Funktion. Diese Funktion kapselt den Prozess zum Erstellen eines Klassenobjekts, wobei dies verwendet wird, um eine neue Instanz zu erstellen und das Klassenobjekt freizugeben. Eine weitere Funktion dieser Art ist die spezifischere OleCreate, das OLE-Verbunddokumenthilfsprogramm, das ein Klassenobjekt erstellt und einen Zeiger auf ein angefordertes Objekt abruft.

Um den Prozess der Instanzerstellung auf verteilten Systemen zu reibungslosen, hat COM vier wichtige neue Instanzenerstellungsmechanismen eingeführt:

Ein Klassenmoniker ermöglicht es Ihnen, die Klasse eines Objekts zu identifizieren und wird in der Regel mit einem anderen Moniker verwendet, z. B. einem Dateimoniker, um den Speicherort des Objekts anzugeben. Dadurch können Sie eine Bindung an ein Objekt herstellen und den Server angeben, der für dieses Objekt gestartet werden soll. Klassenmoniker können auch rechts von Monikern zusammengesetzt werden, die die Bindung an die IClassActivator Schnittstelle unterstützen. Weitere Informationen finden Sie unter Class Monikers.

CoCreateInstanceEx erweitert CoCreateInstance, um ein einzelnes, nicht initialisiertes Objekt zu erstellen, das der angegebenen CLSID auf einem angegebenen Remotecomputer zugeordnet ist. Darüber hinaus ermöglicht CoCreateInstanceEx- anstelle einer einzelnen Schnittstelle eine einzelne Schnittstelle anzufordern und (sofern verfügbar) Zeiger auf diese Schnittstelle zu erhalten und somit weniger Roundtrips zwischen Computern zu ermöglichen. Dies kann die Interaktion von Remoteobjekten wesentlich effizienter machen. Dazu verwendet die Funktion ein Array von MULTI_QI Strukturen.

Das Erstellen eines Objekts über CoCreateInstanceEx- erfordert dennoch, dass das Objekt über einen Aufruf einer der Initialisierungsschnittstellen initialisiert werden muss (z. B. IPersistStorage::Load). Die Hilfsfunktionen CoGetInstanceFromFile und CoGetInstanceFromIStorage sowohl die Instanzerstellungsleistung von CoCreateInstanceEx als auch die Initialisierung, den früheren aus einer Datei und letzterem aus einem Speicher kapseln.

Erstellen eines Objekts über ein Klassenobjekt