|
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
Specifies that 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
Specifies that 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
id, it will start another copy of the server.
Comments
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
Related LinksSoftware for Delphi and C++ Builder developers Software for Visual Studio .NET developers Software for Visual Basic 6 developers Delphi Tips&Tricks
MegaDetailed.NET
TMS Scripter Studio Pro components for Delphi/C++Builder
More Online Helps Win32 Programmer's Reference (win32.hlp) Win32 Multimedia Programmer's Reference (mmedia.hlp) Microsoft Windows Pen API Programmer's Reference (penapi.hlp) Microsoft Windows Sockets 2 Reference (sock2.hlp) Microsoft Windows Telephony API (TAPI) Programmer's Reference (sock2.hlp) Unix Manual Pages
|