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
S_OK
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).
Nach dem Widerrufen des Klassenobjekts kann das Klassenobjekt freigegeben werden, sodass die Anwendung beendet werden kann, wenn die Verweisanzahl null erreicht. Beachten Sie, dass CoRegisterClassObjectIUnknown::AddRef und CoRevokeClassObjectIUnknown::Release aufruft, sodass die beiden Funktionen ein AddRef/Release-Paar bilden.

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

Weitere Informationen

CLSCTX

Cogetclassobject

CoRevokeClassObject

Dllgetclassobject

REGCLS