Share via


REGCLS-Enumeration (combaseapi.h)

Steuert den Typ der Verbindungen mit einem Klassenobjekt.

Syntax

typedef enum tagREGCLS {
  REGCLS_SINGLEUSE = 0,
  REGCLS_MULTIPLEUSE = 1,
  REGCLS_MULTI_SEPARATE = 2,
  REGCLS_SUSPENDED = 4,
  REGCLS_SURROGATE = 8,
  REGCLS_AGILE = 0x10
} REGCLS;

Konstanten

 
REGCLS_SINGLEUSE
Wert: 0
Nachdem eine Anwendung mit einem Klassenobjekt mit CoGetClassObject verbunden wurde, wird das Klassenobjekt aus der öffentlichen Ansicht entfernt, sodass keine anderen Anwendungen eine Verbindung mit dem Objekt herstellen können. Dieser Wert wird im allgemeinen für SDI-Anwendungen (Single Document Interface) verwendet. Die Angabe dieses Werts wirkt sich nicht auf die Verantwortung der Objektanwendung für den Aufruf von CoRevokeClassObject aus. Es muss immer CoRevokeClassObject aufrufen, wenn es mit einer Objektklasse fertig ist.
REGCLS_MULTIPLEUSE
Wert: 1
Mehrere Anwendungen können über Aufrufe von CoGetClassObject eine Verbindung mit dem Klassenobjekt herstellen. Wenn sowohl die REGCLS_MULTIPLEUSE als auch die CLSCTX_LOCAL_SERVER in einem Aufruf von CoRegisterClassObject festgelegt werden, wird das Klassenobjekt auch automatisch als prozessinterner Server registriert, unabhängig davon, ob CLSCTX_INPROC_SERVER explizit festgelegt ist.
REGCLS_MULTI_SEPARATE
Wert: 2
Nützlich zum Registrieren separater CLSCTX_LOCAL_SERVER und CLSCTX_INPROC_SERVER Klassenfactorys durch Aufrufe von CoGetClassObject. Wenn REGCLS_MULTI_SEPARATE festgelegt ist, muss jeder Ausführungskontext separat festgelegt werden. CoRegisterClassObject registriert nicht automatisch einen Out-of-Process-Server (für den CLSCTX_LOCAL_SERVER festgelegt ist) als In-Process-Server. Dadurch kann exe mehrere Instanzen des Objekts für Prozessinterne Anforderungen erstellen, z. B. Selbsteinbettungen, ohne die CLSCTX_LOCAL_SERVER Registrierung zu stören. Wenn eine EXE eine REGCLS_MULTI_SEPARATE Klassenfactory und eine CLSCTX_INPROC_SERVER Klassenfactory registriert, werden instance Erstellungsaufrufe, die CLSCTX_INPROC_SERVER im CLSCTX-Parameter angeben, der von exe ausgeführt wird, lokal erfüllt, ohne sich dem SCM zu nähern. Dieser Mechanismus ist nützlich, wenn exe Funktionen wie OleCreate und OleLoad verwendet, um Einbettungen zu erstellen, aber gleichzeitig keine neue instance für den Selbsteinbettungsfall starten möchte. Die Unterscheidung ist für Einbettungen wichtig, da der Standardhandler standardmäßig den Proxy-Manager aggregiert und die Anwendung dieses Standardverhalten überschreiben sollte, indem oleCreateEmbeddingHelper für den Fall der Selbsteinbettung aufgerufen wird.

Wenn Ihre Anwendung nicht zwischen dem lokalen und dem inproc-Fall unterscheiden muss, müssen Sie Ihre Klassenfactory nicht mit REGCLS_MULTI_SEPARATE registrieren. Tatsächlich führt die Anwendung einen zusätzlichen Netzwerk-Roundtrip zum SCM durch, wenn sie ihre MULTIPLEUSE-Klassenfactory als MULTI_SEPARATE registriert und keine andere Klassenfactory als INPROC_SERVER registriert.
REGCLS_SUSPENDED
Wert: 4
Hält Registrierungs- und Aktivierungsanforderungen für die angegebene CLSID an, bis ein Aufruf von CoResumeClassObjects erfolgt. Dies wird in der Regel verwendet, um die CLSIDs für Server zu registrieren, die mehrere Klassenobjekte registrieren können, um die Gesamtregistrierungszeit und damit die Startzeit der Serveranwendung zu reduzieren, indem sie einen einzelnen Aufruf des SCM durchführen, unabhängig davon, wie viele CLSIDs für den Server registriert sind.

Hinweis Dieses Flag verhindert COM-Aktivierungsfehler aus einer möglichen Racebedingung zwischen dem Herunterfahren einer Anwendung und der Anwendung, die versucht, eine COM-Klasse zu registrieren.

 
REGCLS_SURROGATE
Wert: 8
Das Klassenobjekt ist ein Ersatzprozess zum Ausführen von DLL-Servern. Die vom Ersatzprozess registrierte Klassenfactory ist nicht die tatsächliche Klassenfactory, die vom DLL-Server implementiert wird, sondern eine generische Klassenfactory, die vom Ersatzzeichen implementiert wird. Diese generische Klassenfactory delegiert instance Erstellung und Marshalling an die Klassenfactory des DLL-Servers, der im Ersatzzeichen ausgeführt wird. Weitere Informationen zu DLL-Ersatzzeichen finden Sie unter dem Registrierungswert DllSurrogate .
REGCLS_AGILE
Wert: 0x10
Das -Klassenobjekt aggregiert den Freethread-Marshaller.
und werden für alle inproc Wohnungen sichtbar gemacht. Kann zusammen mit anderen Flags verwendet werden. Beispiel: REGCLS_AGILE
REGCLS_MULTIPLEUSE, um eine zu registrieren
Klassenobjekt, das mehrmals von verwendet werden kann
verschiedene Wohnungen. Ohne andere Flags, Verhalten
behält REGCLS_SINGLEUSE Semantik nur in
Eine instance kann generiert werden.

Hinweise

In CoRegisterClassObject bestimmen Member der REGCLS - und CLSCTX-Enumerationen zusammen, wie das Klassenobjekt registriert wird.

Ein EXE-Ersatzzeichen (in dem DLL-Server ausgeführt werden) ruft CoRegisterClassObject auf, um eine Klassenfactory mithilfe eines neuen REGCLS-Werts zu registrieren, REGCLS_SURROGATE.

Alle Klassenfabriken für DLL-Ersatzzeichen sollten mit REGCLS_SURROGATE registriert werden. Legen Sie REGCLS_SINGLUSE oder REGCLS_MULTIPLEUSE nicht fest, wenn Sie ein Ersatzzeichen für DLL-Server registrieren.

In der folgenden Tabelle sind die zulässigen REGCLS-Wertkombinationen und die Objektregistrierungen zusammengefasst, die von den Kombinationen betroffen sind.

REGCLS_SINGLEUSE REGCLS_MULTIPLEUSE REGCLS_MULTI_SEPARATE Sonstiges
CLSCTX_INPROC_SERVER Fehler In-Process In-Process Fehler
CLSCTX_LOCAL_SERVER Lokal Prozessintern/lokal Lokal Fehler
Die oben genannten Aussagen sind beide zutreffend. Fehler Prozessintern/lokal Prozessintern/lokal Fehler
Sonstiges Fehler Fehler Fehler Fehler

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Kopfzeile combaseapi.h (include Objbase.h)

Weitere Informationen

Cogetclassobject

CoRegisterClassObject

Dllgetclassobject

DllSurrogate