Partager via


Énumération REGCLS (combaseapi.h)

Contrôle le type de connexions à un objet de classe.

Syntax

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

Constantes

 
REGCLS_SINGLEUSE
Valeur : 0
Une fois qu’une application est connectée à un objet de classe avec CoGetClassObject, l’objet de classe est supprimé de la vue publique afin qu’aucune autre application ne puisse s’y connecter. Cette valeur est couramment utilisée pour les applications SDI (Single Document Interface). La spécification de cette valeur n’affecte pas la responsabilité de l’application objet d’appeler CoRevokeClassObject ; il doit toujours appeler CoRevokeClassObject quand il a terminé avec une classe d’objet.
REGCLS_MULTIPLEUSE
Valeur : 1
Plusieurs applications peuvent se connecter à l’objet de classe via des appels à CoGetClassObject. Si les REGCLS_MULTIPLEUSE et les CLSCTX_LOCAL_SERVER sont définis dans un appel à CoRegisterClassObject, l’objet de classe est également automatiquement inscrit en tant que serveur in-process, que CLSCTX_INPROC_SERVER soit explicitement défini.
REGCLS_MULTI_SEPARATE
Valeur : 2
Utile pour inscrire des fabriques de classes CLSCTX_LOCAL_SERVER et CLSCTX_INPROC_SERVER distinctes par le biais d’appels à CoGetClassObject. Si REGCLS_MULTI_SEPARATE est défini, chaque contexte d’exécution doit être défini séparément ; CoRegisterClassObject n’inscrit pas automatiquement un serveur hors processus (pour lequel CLSCTX_LOCAL_SERVER est défini) en tant que serveur in-process. Cela permet à l’EXE de créer plusieurs instances de l’objet pour les besoins in-process, tels que les incorporations autonomes, sans perturber son inscription CLSCTX_LOCAL_SERVER. Si un EXE inscrit une fabrique de classes REGCLS_MULTI_SEPARATE et une fabrique de classes CLSCTX_INPROC_SERVER, instance appels de création qui spécifient CLSCTX_INPROC_SERVER dans le paramètre CLSCTX exécuté par l’EXE sont satisfaits localement sans approcher le SCM. Ce mécanisme est utile lorsque l’EXE utilise des fonctions telles que OleCreate et OleLoad pour créer des incorporations, mais ne souhaite pas en même temps lancer une nouvelle instance d’elle-même pour le cas d’incorporation automatique. La distinction est importante pour les incorporations, car le gestionnaire par défaut agrège le gestionnaire de proxy par défaut et l’application doit remplacer ce comportement par défaut en appelant OleCreateEmbeddingHelper pour le cas d’incorporation automatique.

Si votre application n’a pas besoin de faire la distinction entre le cas local et le cas inproc, vous n’avez pas besoin d’inscrire votre fabrique de classes à l’aide de REGCLS_MULTI_SEPARATE. En fait, l’application entraîne un aller-retour réseau supplémentaire dans le SCM lorsqu’elle inscrit sa fabrique de classe MULTIPLEUSE comme MULTI_SEPARATE et n’enregistre pas une autre fabrique de classe comme INPROC_SERVER.
REGCLS_SUSPENDED
Valeur : 4
Suspend les demandes d’inscription et d’activation pour le CLSID spécifié jusqu’à ce qu’il y ait un appel à CoResumeClassObjects. Cela est généralement utilisé pour inscrire les CLSID pour les serveurs qui peuvent inscrire plusieurs objets de classe afin de réduire le temps d’inscription global, et donc le temps de démarrage de l’application serveur, en effectuant un seul appel au SCM, quel que soit le nombre de CLSID inscrits pour le serveur.

Note Cet indicateur empêche les erreurs d’activation COM d’une condition de concurrence possible entre l’arrêt d’une application et la tentative d’inscription d’une classe COM.

 
REGCLS_SURROGATE
Valeur : 8
L'objet de classe est un processus de substitution utilisé pour exécuter des serveurs de DLL. La fabrique de classes inscrite par le processus de substitution n’est pas la fabrique de classes réelle implémentée par le serveur DLL, mais une fabrique de classes générique implémentée par le substitut. Cette fabrique de classes générique délègue instance création et le marshaling dans la fabrique de classes du serveur DLL s’exécutant dans le substitut. Pour plus d’informations sur les substituts DLL, consultez la valeur de Registre DllSurrogate .
REGCLS_AGILE
Valeur : 0x10
L’objet de classe agrège le marshaler à thread libre
et sera rendu visible à tous les appartements inproc. Peut être utilisé avec d’autres indicateurs. Par exemple, REGCLS_AGILE
REGCLS_MULTIPLEUSE inscrire un
objet de classe qui peut être utilisé plusieurs fois à partir de
différents appartements. Sans autres indicateurs, comportement
conservera REGCLS_SINGLEUSE sémantique uniquement
un instance peut être généré.

Remarques

Dans CoRegisterClassObject, les membres des énumérations REGCLS et CLSCTX , prises ensemble, déterminent la façon dont l’objet de classe est inscrit.

Un substitut EXE (dans lequel les serveurs DLL sont exécutés) appelle CoRegisterClassObject pour inscrire une fabrique de classes à l’aide d’une nouvelle valeur REGCLS , REGCLS_SURROGATE.

Toutes les fabriques de classes pour les substituts DLL doivent être inscrites avec REGCLS_SURROGATE défini. Ne définissez pas REGCLS_SINGLUSE ou REGCLS_MULTIPLEUSE lorsque vous inscrivez un substitut pour les serveurs DLL.

Le tableau suivant récapitule les combinaisons de valeurs REGCLS autorisées et les inscriptions d’objets affectées par les combinaisons.

REGCLS_SINGLEUSE REGCLS_MULTIPLEUSE REGCLS_MULTI_SEPARATE Autres
CLSCTX_INPROC_SERVER Erreur In-process In-process Erreur
CLSCTX_LOCAL_SERVER Local In-process/local Local Erreur
En suivant les deux propositions ci-dessus. Erreur In-process/local In-process/local Erreur
Autres Error Error Error Error

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
En-tête combaseapi.h (inclure Objbase.h)

Voir aussi

CoGetClassObject

CoRegisterClassObject

DllGetClassObject

DllSurrogate