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_ |
|
|
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