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
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_ |
| |
CLSCTX_ |
Error |
Inproc |
Inproc |
Error |
CLSCTX_ |
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