CoCreateInstanceEx-Funktion (combaseapi.h)
Erstellt eine instance einer bestimmten Klasse auf einem bestimmten Computer.
Syntax
HRESULT CoCreateInstanceEx(
[in] REFCLSID Clsid,
[in] IUnknown *punkOuter,
[in] DWORD dwClsCtx,
[in] COSERVERINFO *pServerInfo,
[in] DWORD dwCount,
[in, out] MULTI_QI *pResults
);
Parameter
[in] Clsid
Die CLSID des zu erstellenden Objekts.
[in] punkOuter
Wenn dieser Parameter nicht NULL ist, gibt an, dass die instance als Teil eines Aggregats erstellt wird, und PunkOuter als die neue instance verwendet werden soll, die IUnknown steuert. Die Aggregation wird derzeit nicht prozess- oder computerübergreifend unterstützt. Beim Instanziieren eines Objekts aus dem Prozess wird CLASS_E_NOAGGREGATION zurückgegeben, wenn punkOuter nicht NULL ist.
[in] dwClsCtx
Ein Wert aus der CLSCTX-Enumeration .
[in] pServerInfo
Informationen zum Computer, auf dem das Objekt instanziieren soll. Weitere Informationen finden Sie unter COSERVERINFO. Dieser Parameter kann NULL sein. In diesem Fall wird das Objekt auf dem lokalen Computer oder auf dem computer instanziiert, der in der Registrierung unter dem RemoteServerName-Wert der Klasse angegeben ist, entsprechend der Interpretation des dwClsCtx-Parameters .
[in] dwCount
Die Anzahl der Strukturen in pResults. Dieser Wert muss größer als 0 sein.
[in, out] pResults
Ein Array von MULTI_QI Strukturen. Jede Struktur verfügt über drei Member: den Bezeichner für eine angeforderte Schnittstelle (pIID), den Speicherort zum Zurückgeben des Schnittstellenzeigers (pItf) und den Rückgabewert des Aufrufs von QueryInterface (hr).
Rückgabewert
Diese Funktion kann den Standardrückgabewert E_INVALIDARG sowie die folgenden Werte zurückgeben.
Rückgabecode | BESCHREIBUNG |
---|---|
|
Gibt die erfolgreiche Ausführung an. |
|
Eine angegebene Klasse ist nicht in der Registrierungsdatenbank registriert. Kann auch angeben, dass der Servertyp, den Sie in der CLSCTX-Enumeration angefordert haben, nicht registriert ist oder dass die Werte für die Servertypen in der Registrierung beschädigt sind. |
|
Diese Klasse kann nicht als Teil eines Aggregats erstellt werden. |
|
Mindestens eine, aber nicht alle im pResults-Array angeforderten Schnittstellen wurden erfolgreich abgerufen. Der hr-Member jeder MULTI_QI-Struktur in pResults gibt mit S_OK oder E_NOINTERFACE an, ob die spezifische Schnittstelle zurückgegeben wurde. |
|
Keine der im pResults-Array angeforderten Schnittstellen wurde erfolgreich abgerufen. |
Hinweise
CoCreateInstanceEx erstellt ein einzelnes nicht initialisiertes Objekt, das der angegebenen CLSID auf einem angegebenen Remotecomputer zugeordnet ist. Dies ist eine Erweiterung der Funktion CoCreateInstance, die nur auf dem lokalen Computer ein Objekt erstellt. Darüber hinaus ermöglicht CoCreateInstanceEx , anstatt eine einzelne Schnittstelle anzufordern und einen einzelnen Zeiger auf diese Schnittstelle zu erhalten, ein Array von Strukturen anzugeben, die jeweils bei der Eingabe auf einen Schnittstellenbezeichner (IID) zeigen, und bei der Rückgabe einen Zeiger auf die angeforderte Schnittstelle und den Rückgabewert des QueryInterface-Aufrufs für diese Schnittstelle enthält (falls verfügbar). Dies ermöglicht weniger Roundtrips zwischen Computern.
Diese Funktion kapselt drei Aufrufe: zuerst an CoGetClassObject, um eine Verbindung mit dem Klassenobjekt herzustellen, das der angegebenen CLSID zugeordnet ist, wobei der Speicherort der Klasse angegeben wird. zweitens zu IClassFactory::CreateInstance, um eine nicht initialisierte instance zu erstellen, und schließlich zu IClassFactory::Release, um das Klassenobjekt freizugeben.
Das so erstellte Objekt muss weiterhin durch einen Aufruf einer der Initialisierungsschnittstellen (z . B. IPersistStorage::Load) initialisiert werden. Zwei Funktionen, CoGetInstanceFromFile und CoGetInstanceFromIStorage, kapseln sowohl die instance Erstellung als auch die Initialisierung aus den offensichtlichen Quellen.
Die als pServerInfo-Parameter übergebene COSERVERINFO-Struktur enthält die Sicherheitseinstellungen, die COM beim Erstellen einer neuen instance des angegebenen Objekts verwendet. Beachten Sie, dass dieser Parameter die Sicherheitseinstellungen nicht beeinflusst, die beim Ausführen von Methodenaufrufen für das instanziierte Objekt verwendet werden. Diese Sicherheitseinstellungen können auf Schnittstellenbasis mit der CoSetProxyBlanket-Funktion konfiguriert werden. Siehe auch IClientSecurity::SetBlanket.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows 2000 Professional [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows 2000 Server [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | combaseapi.h (include Objbase.h) |
Bibliothek | Ole32.lib |
DLL | Ole32.dll |