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 使用 OleCreateOleLoad 等函数创建嵌入,但同时不希望为自嵌入情况启动自身的新实例时,此机制非常有用。 这一区别对于嵌入非常重要,因为默认处理程序默认聚合代理管理器,应用程序应通过调用 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 中, REGCLSCLSCTX 枚举的成员共同确定类对象的注册方式。

运行 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)

另请参阅

CoGetClassObject

CoRegisterClassObject

DllGetClassObject

DllSurrogate