REGCLS  75798Y

The REGCLS enumeration defines flags used in CoRegisterClassObjectGUU00R 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 CoGetClassObject2_47ZR8, 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 CoRevokeClassObjectDXBUI2; 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 CoRegisterClassObjectGUU00R, members of both the REGCLS and the CLSCTXV8M0PK 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