# REGCLS

The REGCLS enumeration defines flags used in CoRegisterClassObject to control the type of connections to the class object. It is defined as follows:

    typedef enum tagREGCLS
    {
        REGCLS_SINGLEUSE         = 0,
        REGCLS_MULTIPLEUSE       = 1,
        REGCLS_MULTI_SEPARATE    = 2,
    } REGCLS;

Elements

REGCLS_SINGLEUSE
  Once an application has connected to the class object with CoGetClassObject, the class object is removed from public view so that no other applications can connect to it. This flag is commonly used for single document interface (SDI) applications. Specifying this flag does not affect the responsibility of the object application to call CoRevokeClassObject; it must always call CoRevokeClassObject when it is finished with an object class.
REGCLS_MULTIPLEUSE
  Multiple applications can connect to the class object through calls to CoGetClassObject.
REGCLS_MULTI_SEPARATE
  Similar to REGCLS_MULTIPLEUSE, except that REGCLS_MULTI_SEPARATE does not automatically register the class object as CLSCTX_INPROC_SERVER for a local server. Instead, it provides separate control over each context. When a class is registered this way, if that server tries to bind to an object with its own class identifier, it will start another copy of the server.

Remarks

In CoRegisterClassObject, members of both the REGCLS and the CLSCTX enumerations, taken together, determine how the class object is registered.

The following table summarizes the allowable flag combinations and the object registrations affected by the combinations.

| REGCLS_ SINGLEUSE | REGCLS_ MULTIPLEUSE | REGCLS_ MULTI_ SEPARATE | Other
CLSCTX_ INPROC_ SERVER | Error | Inproc | Inproc | Error
CLSCTX_ LOCAL_ SERVER | Local | Inproc/local | Local | Error
Both of the above | Error | Inproc/local | Inproc/local | Error
Other | Error | Error | Error | Error

REGCLS_MULTIPLEUSE in combination with CLSCTX_LOCAL_SERVER automatically registers the class object as an in-process server (CLSCTX_INPROC_SERVER). In contrast, registering a class object as a local server and specifying REGCLS_MULTIPLE_SEPARATE does not register the class object as an in-process server (registers the object with the CLSCTX_LOCAL_SERVER flag, but does not automatically add the CLSCTX_INPROC_SERVER flag, as is the case when you specify the REGCLS_MULTIPLEUSE flag. This distinction is important in applications that are both OLE containers and OLE embeddings, allowing a container/server to be inserted into itself.

In general, the following two registrations have the same effect -- they register class objects as both multiple-use and as in-process servers:

    CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE

    (CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER), REGCLS_MULTI_SEPARATE

The following registers the class object only as a multiple-use local server:

    CLSCTX_LOCAL_SERVER, REGCLS_MULTI_SEPARATE

See Also

CoGetClassObject, CoRegisterClassObject, CoRevokeClassObject, DllGetClassObject