Condividi tramite


Enumerazione REGCLS (combaseapi.h)

Controlla il tipo di connessioni a un oggetto classe.

Sintassi

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

Costanti

 
REGCLS_SINGLEUSE
Valore: 0
Dopo che un'applicazione è connessa a un oggetto classe con CoGetClassObject, l'oggetto classe viene rimosso dalla visualizzazione pubblica in modo che nessun'altra applicazione possa connettersi. Questo valore in genere viene utilizzato per applicazioni SDI (Single Document Interface, interfaccia a documento singolo). La specifica di questo valore non influisce sulla responsabilità dell'applicazione oggetto di chiamare CoRevokeClassObject; deve sempre chiamare CoRevokeClassObject al termine di una classe oggetto.
REGCLS_MULTIPLEUSE
Valore: 1
Più applicazioni possono connettersi all'oggetto classe tramite chiamate a CoGetClassObject. Se entrambi i REGCLS_MULTIPLEUSE e CLSCTX_LOCAL_SERVER vengono impostati in una chiamata a CoRegisterClassObject, l'oggetto classe viene registrato automaticamente come server in-process, indipendentemente dal fatto che CLSCTX_INPROC_SERVER sia impostato in modo esplicito.
REGCLS_MULTI_SEPARATE
Valore: 2
Utile per registrare CLSCTX_LOCAL_SERVER separate e CLSCTX_INPROC_SERVER class factory tramite chiamate a CoGetClassObject. Se REGCLS_MULTI_SEPARATE è impostato, ogni contesto di esecuzione deve essere impostato separatamente; CoRegisterClassObject non registra automaticamente un server out-of-process (per il quale è impostato CLSCTX_LOCAL_SERVER) come server in-process. In questo modo il file EXE può creare più istanze dell'oggetto per esigenze in-process, ad esempio incorporamenti autonomi, senza disturbare la registrazione CLSCTX_LOCAL_SERVER. Se un exe registra una class factory di REGCLS_MULTI_SEPARATE e una class factory CLSCTX_INPROC_SERVER, le chiamate di creazione di istanze che specificano CLSCTX_INPROC_SERVER nel parametro CLSCTX eseguito dal file EXE verranno soddisfatte localmente senza avvicinarsi a SCM. Questo meccanismo è utile quando l'exe usa funzioni come OleCreate e OleLoad per creare incorporamenti, ma allo stesso tempo non vuole avviare una nuova istanza di se stessa per il caso di incorporamento automatico. La distinzione è importante per gli incorporamenti perché il gestore predefinito aggrega la gestione proxy per impostazione predefinita e l'applicazione deve eseguire l'override di questo comportamento predefinito chiamando OleCreateEmbeddingHelper per il caso di incorporamento automatico.

Se l'applicazione non deve distinguere tra il caso locale e quello inproc, non è necessario registrare la class factory usando REGCLS_MULTI_SEPARATE. Infatti, l'applicazione comporta un round trip di rete aggiuntivo per SCM quando registra la propria factory di classi MULTIPLEUSE come MULTI_SEPARATE e non registra un'altra class factory come INPROC_SERVER.
REGCLS_SUSPENDED
Valore: 4
Sospende le richieste di registrazione e attivazione per il CLSID specificato fino a quando non viene eseguita una chiamata a CoResumeClassObjects. Viene usato in genere per registrare i CLSID per i server che possono registrare più oggetti di classe per ridurre il tempo di registrazione complessivo e quindi il tempo di avvio dell'applicazione server, effettuando una singola chiamata a SCM, indipendentemente dal numero di CLSID registrati per il server.

Nota Questo flag impedisce errori di attivazione COM da una possibile race condition tra l'arresto di un'applicazione e l'applicazione che tenta di registrare una classe COM.

 
REGCLS_SURROGATE
Valore: 8
L'oggetto classe è un processo surrogato utilizzato per l'esecuzione di server DLL. La class factory registrata dal processo surrogato non è la class factory effettiva implementata dal server DLL, ma una class factory generica implementata dal surrogato. Questa classe factory generica delega la creazione dell'istanza e il marshalling alla class factory del server DLL in esecuzione nel surrogato. Per altre informazioni sui surrogati DLL, vedere il valore del Registro di sistema DllSurrogate .
REGCLS_AGILE
Valore: 0x10
L'oggetto classe aggrega il gestore di marshalling a thread libero
e saranno resi visibili a tutti gli appartamenti inproc. Può essere usato insieme ad altri flag. Ad esempio, REGCLS_AGILE
REGCLS_MULTIPLEUSE per registrare un
oggetto classe che può essere utilizzato più volte da
appartamenti diversi. Senza altri flag, comportamento
manterrà REGCLS_SINGLEUSE semantica solo in tale
è possibile generare un'istanza.

Commenti

In CoRegisterClassObject, i membri sia dell'enumerazione REGCLS che delle enumerazioni CLSCTX , insieme, determinano la modalità di registrazione dell'oggetto classe.

Un surrogato EXE (in cui vengono eseguiti i server DLL) chiama CoRegisterClassObject per registrare una class factory usando un nuovo valore REGCLS , REGCLS_SURROGATE.

Tutte le class factory per i surrogati DLL devono essere registrate con REGCLS_SURROGATE set. Non impostare REGCLS_SINGLUSE o REGCLS_MULTIPLEUSE quando si registra un surrogato per i server DLL.

La tabella seguente riepiloga le combinazioni di valori REGCLS consentite e le registrazioni degli oggetti interessate dalle combinazioni.

REGCLS_SINGLEUSE REGCLS_MULTIPLEUSE REGCLS_MULTI_SEPARATE Altro
CLSCTX_INPROC_SERVER Errore In-Process In-Process Errore
CLSCTX_LOCAL_SERVER Locale In-process/local Locale Errore
Tutte le risposte precedenti Errore In-process/local In-process/local Errore
Altri Errore Errore Errore Errore

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Intestazione combaseapi.h (include Objbase.h)

Vedi anche

CoGetClassObject

CoRegisterClassObject

Dllgetclassobject

DllSurrogate