Enumeración REGCLS (combaseapi.h)

Controla el tipo de conexiones a un objeto de clase.

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
Valor: 0
Una vez que una aplicación está conectada a un objeto de clase con CoGetClassObject, el objeto de clase se quita de la vista pública para que ninguna otra aplicación pueda conectarse a él. Este valor normalmente se utiliza para las aplicaciones de interfaz de único documento (SDI). Especificar este valor no afecta a la responsabilidad de la aplicación de objeto de llamar a CoRevokeClassObject; siempre debe llamar a CoRevokeClassObject cuando termine con una clase de objeto.
REGCLS_MULTIPLEUSE
Valor: 1
Varias aplicaciones se pueden conectar al objeto de clase mediante llamadas a CoGetClassObject. Si tanto el REGCLS_MULTIPLEUSE como el CLSCTX_LOCAL_SERVER se establecen en una llamada a CoRegisterClassObject, el objeto de clase también se registra automáticamente como un servidor en proceso, si CLSCTX_INPROC_SERVER se establece explícitamente.
REGCLS_MULTI_SEPARATE
Valor: 2
Resulta útil para registrar generadores de clases de CLSCTX_LOCAL_SERVER y CLSCTX_INPROC_SERVER independientes a través de llamadas a CoGetClassObject. Si se establece REGCLS_MULTI_SEPARATE, cada contexto de ejecución debe establecerse por separado; CoRegisterClassObject no registra automáticamente un servidor fuera de proceso (para el que se establece CLSCTX_LOCAL_SERVER) como servidor en proceso. Esto permite que el EXE cree varias instancias del objeto para las necesidades en proceso, como las inserciones automáticas, sin alterar su registro CLSCTX_LOCAL_SERVER. Si un EXE registra un generador de clases de REGCLS_MULTI_SEPARATE y un generador de clases de CLSCTX_INPROC_SERVER, las llamadas de creación de instancias que especifican CLSCTX_INPROC_SERVER en el parámetro CLSCTX ejecutado por exe se satisfacerían localmente sin acercarse al SCM. Este mecanismo es útil cuando el EXE usa funciones como OleCreate y OleLoad para crear incrustaciones, pero al mismo no desea iniciar una nueva instancia de sí misma para el caso de inserción automática. La distinción es importante para las inserciones porque el controlador predeterminado agrega el administrador de proxy de forma predeterminada y la aplicación debe invalidar este comportamiento predeterminado llamando a OleCreateEmbeddingHelper para el caso de inserción automática.

Si la aplicación no necesita distinguir entre el local y el caso inproc, no necesita registrar el generador de clases mediante REGCLS_MULTI_SEPARATE. De hecho, la aplicación incurre en un recorrido de ida y vuelta de red adicional al SCM cuando registra su generador de clases MULTIPLEUSE como MULTI_SEPARATE y no registra otro generador de clases como INPROC_SERVER.
REGCLS_SUSPENDED
Valor: 4
Suspende las solicitudes de registro y activación del CLSID especificado hasta que haya una llamada a CoResumeClassObjects. Esto se usa normalmente para registrar los CLSID para los servidores que pueden registrar varios objetos de clase para reducir el tiempo de registro general y, por tanto, el tiempo de inicio de la aplicación de servidor, realizando una sola llamada al SCM, independientemente del número de CLSID registrados para el servidor.

Nota Esta marca impide que los errores de activación COM de una posible condición de carrera entre una aplicación se apague y esa aplicación intente registrar una clase COM.

 
REGCLS_SURROGATE
Valor: 8
El objeto de clase es un proceso suplente utilizado para ejecutar los servidores de DLL. El generador de clases registrado por el proceso suplente no es el generador de clases real implementado por el servidor DLL, sino un generador de clases genérico implementado por el suplente. Este generador de clases genérico delega la creación y serialización de instancias en el generador de clases del servidor DLL que se ejecuta en el suplente. Para obtener más información sobre los suplentes de DLL, consulte el valor del Registro DllSurrogate .
REGCLS_AGILE
Valor: 0x10
El objeto de clase agrega el serializador de subprocesos libres.
y serán visibles para todos los apartamentos inproc. Se puede usar junto con otras marcas. Por ejemplo, REGCLS_AGILE
REGCLS_MULTIPLEUSE registrar un
objeto de clase que se puede usar varias veces desde
apartamentos diferentes. Sin otras marcas, comportamiento
conservará REGCLS_SINGLEUSE semántica en ese solo
se puede generar una instancia.

Comentarios

En CoRegisterClassObject, los miembros de las enumeraciones REGCLS y CLSCTX , tomadas juntas, determinan cómo se registra el objeto de clase.

Un suplente EXE (en el que se ejecutan los servidores DLL) llama a CoRegisterClassObject para registrar un generador de clases mediante un nuevo valor REGCLS , REGCLS_SURROGATE.

Todos los generadores de clases para suplentes dll deben registrarse con REGCLS_SURROGATE establecido. No establezca REGCLS_SINGLUSE ni REGCLS_MULTIPLEUSE al registrar un suplente para servidores DLL.

En la tabla siguiente se resumen las combinaciones de valores REGCLS permitidas y los registros de objetos afectados por las combinaciones.

REGCLS_SINGLEUSE REGCLS_MULTIPLEUSE REGCLS_MULTI_SEPARATE Otros
CLSCTX_INPROC_SERVER Error En proceso En proceso Error
CLSCTX_LOCAL_SERVER Local En proceso/local Local Error
Todo lo anterior Error En proceso/local En proceso/local Error
Otros Error Error Error Error

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado combaseapi.h (incluya Objbase.h)

Consulte también

CoGetClassObject

CoRegisterClassObject

DllGetClassObject

DllSurrogate