coRegisterClassObject 函数 (combaseapi.h)
将 EXE 类对象注册到 OLE,以便其他应用程序可以连接到该对象。
语法
HRESULT CoRegisterClassObject(
[in] REFCLSID rclsid,
[in] LPUNKNOWN pUnk,
[in] DWORD dwClsContext,
[in] DWORD flags,
[out] LPDWORD lpdwRegister
);
参数
[in] rclsid
要注册的 CLSID。
[in] pUnk
指向正在发布其可用性的类对象上的 IUnknown 接口的指针。
[in] dwClsContext
要在其中运行可执行代码的上下文。 有关这些上下文值的信息,请参阅 CLSCTX 枚举。
[in] flags
指示如何与类对象建立连接。 有关这些标志的信息,请参阅 REGCLS 枚举。
[out] lpdwRegister
指向标识已注册的类对象的值的指针;稍后由 CoRevokeClassObject 函数用来撤销注册。
返回值
此函数可以返回标准返回值E_INVALIDARG、E_OUTOFMEMORY和E_UNEXPECTED,以及以下值。
返回代码 | 说明 |
---|---|
|
已成功注册类对象。 |
注解
EXE 对象应用程序应在启动时调用 CoRegisterClassObject 。 它还可用于注册内部对象,供同一 EXE 或其他代码 (使用,如 EXE 使用的 DLL) 。 只有 EXE 对象应用程序调用 CoRegisterClassObject。 对象处理程序或 DLL 对象应用程序不调用此函数,而是必须实现和导出 DllGetClassObject 函数。
启动时,多用途 EXE 对象应用程序必须创建一个类对象, (其上的 IClassFactory 接口) ,并调用 CoRegisterClassObject 来注册类对象。 支持多个不同类 (的对象应用程序(如多种类型的可嵌入对象) 必须为每个类分配和注册不同的类对象。
同一类对象的多个注册是独立的,不产生错误。 每个后续注册都会在 lpdwRegister 中生成一个唯一密钥。
多个文档接口 (MDI) 应用程序必须注册其类对象。 单一文档接口 (SDI) 应用程序必须注册其类对象,前提是它们可以通过 /Embedding 开关启动。
类对象的服务器应调用 CoRevokeClassObject 来撤销类对象, (删除其注册) ,如果以下所有条件都成立:
- 对象定义没有现有实例。
- 类对象上没有锁。
- 向类对象提供服务的应用程序不受用户控制, (在显示器) 上对用户不可见。
从 Windows Server 2003 开始,如果 COM 对象应用程序注册为服务,则 COM 会验证注册。 COM 确保服务控制管理器 (SCM) 中服务的进程 ID 与注册进程的进程 ID 匹配。 否则,COM 注册失败。 如果 COM 对象应用程序在没有注册表项的系统帐户中运行,则 COM 会将对象应用程序标识视为 “启动用户”。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 专业版 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows 2000 Server [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | combaseapi.h (包括 Objbase.h) |
Library | Ole32.lib |
DLL | Ole32.dll |