REGCLS 枚举 (combaseapi.h)
控制与类对象的连接类型。
语法
typedef enum tagREGCLS {
REGCLS_SINGLEUSE = 0,
REGCLS_MULTIPLEUSE = 1,
REGCLS_MULTI_SEPARATE = 2,
REGCLS_SUSPENDED = 4,
REGCLS_SURROGATE = 8,
REGCLS_AGILE = 0x10
} REGCLS;
常量
REGCLS_SINGLEUSE 值: 0 使用 CoGetClassObject 将应用程序连接到类对象后,将从公共视图中删除该类对象,以便其他应用程序无法连接到该类对象。 此值通常用于单文档界面 (SDI) 应用程序。 指定此值不会影响对象应用程序调用 CoRevokeClassObject 的责任;使用对象类完成时,它必须始终调用 CoRevokeClassObject 。 |
|
REGCLS_MULTIPLEUSE 值:1 多个应用程序可以通过调用 CoGetClassObject 连接到类对象。 如果在对 CoRegisterClassObject 的调用中同时设置了REGCLS_MULTIPLEUSE和CLSCTX_LOCAL_SERVER,则无论是否显式设置CLSCTX_INPROC_SERVER,类对象也会自动注册为进程内服务器。 |
|
REGCLS_MULTI_SEPARATE 值: 2 用于通过调用 CoGetClassObject 注册单独的CLSCTX_LOCAL_SERVER和CLSCTX_INPROC_SERVER类工厂。 如果设置了REGCLS_MULTI_SEPARATE,则必须单独设置每个执行上下文; CoRegisterClassObject 不会自动注册进程外服务器 (CLSCTX_LOCAL_SERVER设置为进程内服务器) 。 这允许 EXE 根据进程内需求(例如自嵌入)创建对象的多个实例,而不会干扰其CLSCTX_LOCAL_SERVER注册。 如果 EXE 注册REGCLS_MULTI_SEPARATE类工厂和CLSCTX_INPROC_SERVER类工厂,则实例创建调用在 EXE 执行的 CLSCTX 参数中指定CLSCTX_INPROC_SERVER将在本地得到满足,而无需接近 SCM。 当 EXE 使用 OleCreate 和 OleLoad 等函数创建嵌入,但同时不希望为自嵌入情况启动自身的新实例时,此机制非常有用。 这一区别对于嵌入非常重要,因为默认处理程序默认聚合代理管理器,应用程序应通过调用 OleCreateEmbeddingHelper 来替代此默认行为,以处理自嵌入情况。 如果应用程序不需要区分本地和过程案例,则无需使用 REGCLS_MULTI_SEPARATE 注册类工厂。 事实上,当应用程序将其 MULTIPLEUSE 类工厂注册为MULTI_SEPARATE而不将另一个类工厂注册为INPROC_SERVER时,应用程序将产生额外的网络往返到 SCM。 |
|
REGCLS_SUSPENDED 值: 4 暂停指定 CLSID 的注册和激活请求,直到调用 CoResumeClassObjects 为止。 这通常用于为可以注册多个类对象的服务器注册 CLSID,以便通过对 SCM 进行单个调用来减少总体注册时间,从而缩短服务器应用程序启动时间,无论为服务器注册了多少 CLSID。 注意 此标志可防止在关闭应用程序与尝试注册 COM 类的应用程序之间出现可能的争用条件导致 COM 激活错误。 |
|
REGCLS_SURROGATE 值: 8 类对象是用来运行 DLL 服务器的代理项进程。 代理进程注册的类工厂不是 DLL 服务器实现的实际类工厂,而是代理项实现的泛型类工厂。 此泛型类工厂将实例创建和封送委托给代理项中运行的 DLL 服务器的类工厂。 有关 DLL 代理项的详细信息,请参阅 DllSurrogate 注册表值。 |
|
REGCLS_AGILE 值: 0x10 类对象聚合自由线程封送处理器 和 将对所有项目内公寓可见。 可以与其他标志一起使用。 例如,REGCLS_AGILE |
REGCLS_MULTIPLEUSE注册 可从 中多次使用的类对象 不同的公寓。 没有其他标志的行为 将仅保留REGCLS_SINGLEUSE语义 可以生成一个实例。 |
注解
在 CoRegisterClassObject 中, REGCLS 和 CLSCTX 枚举的成员共同确定类对象的注册方式。
运行 DLL 服务器的 EXE 代理 () 调用 CoRegisterClassObject 以使用新的 REGCLS 值注册类工厂,REGCLS_SURROGATE。
DLL 代理项的所有类工厂都应使用 REGCLS_SURROGATE 集进行注册。 为 DLL 服务器注册代理项时,请勿设置REGCLS_SINGLUSE或REGCLS_MULTIPLEUSE。
下表汇总了允许的 REGCLS 值组合以及受组合影响的对象注册。
REGCLS_SINGLEUSE | REGCLS_MULTIPLEUSE | REGCLS_MULTI_SEPARATE | 其他 | |
---|---|---|---|---|
CLSCTX_INPROC_SERVER | 错误 | 进程内 | 进程内 | 错误 |
CLSCTX_LOCAL_SERVER | Local | 进程内/本地 | Local | 错误 |
以上都是 | 错误 | 进程内/本地 | 进程内/本地 | 错误 |
其他 | 错误 | 错误 | 错误 | 错误 |
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
标头 | combaseapi.h (包括 Objbase.h) |