CoRegisterClassObject-Funktion (combaseapi.h)
Registriert ein EXE-Klassenobjekt bei OLE, damit andere Anwendungen eine Verbindung damit herstellen können.
Syntax
HRESULT CoRegisterClassObject(
[in] REFCLSID rclsid,
[in] LPUNKNOWN pUnk,
[in] DWORD dwClsContext,
[in] DWORD flags,
[out] LPDWORD lpdwRegister
);
Parameter
[in] rclsid
Die zu registrierende CLSID.
[in] pUnk
Ein Zeiger auf die IUnknown-Schnittstelle des Klassenobjekts, dessen Verfügbarkeit veröffentlicht wird.
[in] dwClsContext
Der Kontext, in dem der ausführbare Code ausgeführt werden soll. Informationen zu diesen Kontextwerten finden Sie in der CLSCTX-Enumeration .
[in] flags
Gibt an, wie Verbindungen mit dem Klassenobjekt hergestellt werden. Informationen zu diesen Flags finden Sie in der REGCLS-Enumeration .
[out] lpdwRegister
Ein Zeiger auf einen Wert, der das registrierte Klassenobjekt identifiziert; später von der CoRevokeClassObject-Funktion verwendet, um die Registrierung zu widerrufen.
Rückgabewert
Diese Funktion kann die Standardrückgabewerte E_INVALIDARG, E_OUTOFMEMORY und E_UNEXPECTED sowie die folgenden Werte zurückgeben.
Rückgabecode | BESCHREIBUNG |
---|---|
|
Das Klassenobjekt wurde erfolgreich registriert. |
Hinweise
EXE-Objektanwendungen sollten CoRegisterClassObject beim Start aufrufen. Es kann auch verwendet werden, um interne Objekte für die Verwendung durch dasselbe EXE oder einen anderen Code (z. B. DLLs) zu registrieren, den die EXE verwendet. Nur EXE-Objektanwendungen rufen CoRegisterClassObject auf. Objekthandler oder DLL-Objektanwendungen rufen diese Funktion nicht auf. Stattdessen müssen sie die DllGetClassObject-Funktion implementieren und exportieren.
Beim Start muss eine mehrfach verwendete EXE-Objektanwendung ein Klassenobjekt (mit der IClassFactory-Schnittstelle ) erstellen und CoRegisterClassObject aufrufen, um das Klassenobjekt zu registrieren. Objektanwendungen, die mehrere verschiedene Klassen unterstützen (z. B. mehrere Typen von einbettbaren Objekten), müssen jeweils ein anderes Klassenobjekt zuordnen und registrieren.
Mehrere Registrierungen desselben Klassenobjekts sind unabhängig und erzeugen keinen Fehler. Jede nachfolgende Registrierung ergibt einen eindeutigen Schlüssel in lpdwRegister.
MDI-Anwendungen (Multiple Document Interface) müssen ihre Klassenobjekte registrieren. SDI-Anwendungen (Single Document Interface) müssen ihre Klassenobjekte nur registrieren, wenn sie mit dem Schalter /Embedding gestartet werden können.
Der Server für ein Klassenobjekt sollte CoRevokeClassObject aufrufen, um das Klassenobjekt zu widerrufen (seine Registrierung zu entfernen), wenn alle folgenden Werte zutreffen:
- Es sind keine Instanzen der Objektdefinition vorhanden.
- Es gibt keine Sperren für das Klassenobjekt.
- Die Anwendung, die Dienste für das Klassenobjekt bereitstellt, steht nicht unter Benutzersteuerung (für den Benutzer nicht auf der Anzeige sichtbar).
Ab Windows Server 2003 überprüft COM die Registrierung, wenn eine COM-Objektanwendung als Dienst registriert ist. COM stellt sicher, dass die Prozess-ID des Diensts im Dienststeuerungs-Manager (SCM) mit der Prozess-ID des Registrierungsprozesses übereinstimmt. Andernfalls schlägt COM die Registrierung fehl. Wenn die COM-Objektanwendung im Systemkonto ohne Registrierungsschlüssel ausgeführt wird, behandelt COM die Anwendungsidentität der Objekte als Starten des Benutzers.
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 | combaseapi.h (include Objbase.h) |
Bibliothek | Ole32.lib |
DLL | Ole32.dll |