É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) |