CComModule 类

从 ATL 7.0 开始,CComModule 已弃用:有关更多详细信息,请参阅 ATL 模块类

重要

无法在 Windows 运行时中执行的应用程序中使用此类及其成员。

语法

class CComModule : public _ATL_MODULE

成员

公共方法

名称 描述
CComModule::GetClassObject 创建指定的 CLSID 的对象。 仅适用于 DLL。
CComModule::GetModuleInstance 返回 m_hInst
CComModule::GetResourceInstance 返回 m_hInstResource
CComModule::GetTypeLibInstance 返回 m_hInstTypeLib
CComModule::Init 初始化数据成员。
CComModule::RegisterClassHelper 在系统注册表中输入对象的标准类注册。
CComModule::RegisterClassObjects 注册类对象。 仅适用于 EXE。
CComModule::RegisterServer 更新对象映射中每个对象的系统注册表。
CComModule::RegisterTypeLib 注册类型库。
CComModule::RevokeClassObjects 撤销类对象。 仅适用于 EXE。
CComModule::Term 释放数据成员。
CComModule::UnregisterClassHelper 从系统注册表中删除对象的标准类注册。
CComModule::UnregisterServer 取消注册对象映射中的每个对象。
CComModule::UpdateRegistryClass 注册或取消注册对象的标准类注册。
CComModule::UpdateRegistryFromResourceD 运行指定资源中包含的脚本以注册或取消注册对象。
CComModule::UpdateRegistryFromResourceS 静态链接到 ATL 注册表组件。 运行指定资源中包含的脚本以注册或取消注册对象。

公共数据成员

“属性” 描述
CComModule::m_csObjMap 确保对对象映射信息进行同步访问。
CComModule::m_csTypeInfoHolder 确保对类型库信息进行同步访问。
CComModule::m_csWindowCreate 确保对窗口类信息和创建窗口期间使用的静态数据进行同步访问。
CComModule::m_hInst 包含模块实例的句柄。
CComModule::m_hInstResource 默认包含模块实例的句柄。
CComModule::m_hInstTypeLib 默认包含模块实例的句柄。
CComModule::m_pObjMap 指向模块实例维护的对象映射。

备注

注意

此类已弃用,ATL 代码生成向导现在使用 CAtlAutoThreadModuleCAtlModule 派生类。 有关详细信息,请参阅 ATL 模块类。 以下信息适用于使用较旧 ATL 版本创建的应用程序。 ATL 仍包含 CComModule 以实现后向兼容。

CComModule 实现一个 COM 服务器模块,允许客户端访问模块的组件。 CComModule 支持 DLL(进程内)和 EXE(本地)模块。

CComModule 实例使用对象映射来维护一组类对象定义。 此对象映射实现为 _ATL_OBJMAP_ENTRY 结构的数组,包含用于以下目的的信息:

  • 在系统注册表中输入和删除对象说明。

  • 通过类工厂实例化对象。

  • 在客户端与组件中的根对象之间建立通信。

  • 执行类对象的生存期管理。

当你运行 ATL COM AppWizard 时,向导会自动生成 _ModuleCComModule 的全局实例或从它派生的类。 有关 ATL 项目向导的详细信息,请参阅创建 ATL 项目一文。

除了 CComModule 以外,ATL 还提供 CComAutoThreadModule,用于为 EXE 和 Windows 服务实现单元模型模块。 要在多个单元中创建对象时,请从 CComAutoThreadModule 派生模块。

继承层次结构

_ATL_MODULE

CAtlModule

CAtlModuleT

CComModule

要求

标头:atlbase.h

CComModule::GetClassObject

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

HRESULT GetClassObject(
    REFCLSID rclsid,
    REFIID riid,
    LPVOID* ppv) throw();

参数

rclsid
[in] 要创建的对象的 CLSID。

riid
[in] 请求的 接口的 IID。

ppv
[out] 指向 riid 标识的接口指针的指针。 如果对象不支持此接口,则 ppv 设置为 NULL

返回值

标准 HRESULT 值。

备注

创建指定 CLSID 的对象并检索指向此对象的接口指针。

GetClassObject 仅适用于 DLL。

CComModule::GetModuleInstance

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

HINSTANCE GetModuleInstance() throw();

返回值

用于标识此模块的 HINSTANCE。

注解

返回 m_hInst 数据成员。

CComModule::GetResourceInstance

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

HINSTANCE GetResourceInstance() throw();

返回值

一个 HINSTANCE。

注解

返回 m_hInstResource 数据成员。

CComModule::GetTypeLibInstance

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

HINSTANCE GetTypeLibInstance() const throw();

返回值

一个 HINSTANCE。

备注

返回 m_hInstTypeLib 数据成员。

CComModule::Init

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

HRESULT Init(
    _ATL_OBJMAP_ENTRY* p,
    HINSTANCE h,
    const GUID* plibid = NULL) throw();

参数

p
[in] 指向对象映射条目数组的指针。

h
[in] 传递给 DLLMainWinMain 的 HINSTANCE。

plibid
[in] 指向与项目关联的类型库的 LIBID 的指针。

返回值

标准 HRESULT 值。

注解

初始化所有数据成员。

CComModule::m_csObjMap

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

CRITICAL_SECTION m_csObjMap;

备注

确保对对象映射进行同步访问。

CComModule::m_csTypeInfoHolder

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

CRITICAL_SECTION m_csTypeInfoHolder;

注解

确保对类型库进行同步访问。

CComModule::m_csWindowCreate

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

CRITICAL_SECTION m_csWindowCreate;

备注

确保对窗口类信息和创建窗口期间使用的静态数据进行同步访问。

CComModule::m_hInst

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

HINSTANCE m_hInst;

备注

包含模块实例的句柄。

Init 方法将 m_hInst 设置为传递给 DLLMainWinMain 的句柄。

CComModule::m_hInstResource

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

HINSTANCE m_hInstResource;

备注

默认包含模块实例的句柄。

Init 方法将 m_hInstResource 设置为传递给 DLLMainWinMain 的句柄。 可将 m_hInstResource 显式设置为资源的句柄。

GetResourceInstance 方法返回存储在 m_hInstResource 中的句柄。

CComModule::m_hInstTypeLib

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

HINSTANCE m_hInstTypeLib;

注解

默认包含模块实例的句柄。

Init 方法将 m_hInstTypeLib 设置为传递给 DLLMainWinMain 的句柄。 可将 m_hInstTypeLib 显式设置为类型库的句柄。

GetTypeLibInstance 方法返回存储在 m_hInstTypeLib 中的句柄。

CComModule::m_pObjMap

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

_ATL_OBJMAP_ENTRY* m_pObjMap;

备注

指向模块实例维护的对象映射。

CComModule::RegisterClassHelper

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

ATL_DEPRECATED HRESULT RegisterClassHelper(
    const CLSID& clsid,
    LPCTSTR lpszProgID,
    LPCTSTR lpszVerIndProgID,
    UINT nDescID,
    DWORD dwFlags);

参数

clsid
[in] 要注册的对象的 CLSID。

lpszProgID
[in] 与对象关联的 ProgID。

lpszVerIndProgID
[in] 与对象关联的、与版本无关的 ProgID。

nDescID
[in] 对象说明的字符串资源的标识符。

dwFlags
[in] 指定要在注册表中输入的线程模型。 可能的值为 THREADFLAGS_APARTMENT、THREADFLAGS_BOTH 或 AUTPRXFLAG。

返回值

标准 HRESULT 值。

注解

在系统注册表中输入对象的标准类注册。

UpdateRegistryClass 方法调用 RegisterClassHelper

CComModule::RegisterClassObjects

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

HRESULT RegisterClassObjects(DWORD dwClsContext, DWORD dwFlags) throw();

参数

dwClsContext
[in] 指定要在其中运行类对象的上下文。 可能的值为 CLSCTX_INPROC_SERVER、CLSCTX_INPROC_HANDLER 或 CLSCTX_LOCAL_SERVER。 有关这些值的说明,请参阅 Windows SDK 中的 CLSCTX

dwFlags
[in] 确定类对象的连接类型。 可能的值为 REGCLS_SINGLEUSE、REGCLS_MULTIPLEUSE 或 REGCLS_MULTI_SEPARATE。 有关这些值的说明,请参阅 Windows SDK 中的 REGCLS

返回值

标准 HRESULT 值。

备注

将 EXE 类对象注册到 OLE,以便其他应用程序可以连接到该对象。 此方法仅适用于 EXE。

CComModule::RegisterServer

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

HRESULT RegisterServer(
    BOOL bRegTypeLib = FALSE,
    const CLSID* pCLSID = NULL) throw();

参数

bRegTypeLib
[in] 指示是否注册类型库。 默认值是 FALSE。

pCLSID
[in] 指向要注册的对象的 CLSID。 如果为 NULL(默认值),则注册对象映射中的所有对象。

返回值

标准 HRESULT 值。

注解

根据 pCLSID 参数,为单个类对象或对象映射中的所有对象更新系统注册表

如果 bRegTypeLib 为 TRUE,则也会更新类型库信息

有关如何将条目添加到对象映射的信息,请参阅 OBJECT_ENTRY_AUTO

对于 DLL,RegisterServer 将由 DLLRegisterServer 自动调用;对于使用 /RegServer 命令行选项运行的 EXE,它将由 WinMain 调用。

CComModule::RegisterTypeLib

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

HRESULT RegisterTypeLib() throw();
HRESULT RegisterTypeLib(LPCTSTR lpszIndex) throw();

参数

lpszIndex
[in] 采用 "\\N" 格式的字符串,其中 N 是 TYPELIB 资源的整数索引。

返回值

标准 HRESULT 值。

备注

将有关类型库的信息添加到系统注册表。

如果模块实例包含多个类型库,请使用此方法的第二个版本来指定应使用哪个类型库。

CComModule::RevokeClassObjects

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

HRESULT RevokeClassObjects() throw();

返回值

标准 HRESULT 值。

备注

删除类对象。 此方法仅适用于 EXE。

CComModule::Term

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

void Term() throw();

备注

释放所有数据成员。

CComModule::UnregisterClassHelper

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

ATL_DEPRECATED HRESULT UnregisterClassHelper(
    const CLSID& clsid,
    LPCTSTR lpszProgID,
    LPCTSTR lpszVerIndProgID);

参数

clsid
[in] 要取消注册的对象的 CLSID。

lpszProgID
[in] 与对象关联的 ProgID。

lpszVerIndProgID
[in] 与对象关联的、与版本无关的 ProgID。

返回值

标准 HRESULT 值。

注解

从系统注册表中删除对象的标准类注册。

UpdateRegistryClass 方法调用 UnregisterClassHelper

CComModule::UnregisterServer

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

HRESULT UnregisterServer(const CLSID* pCLSID = NULL) throw ();
inline HRESULT UnregisterServer(BOOL bUnRegTypeLib, const CLSID* pCLSID = NULL) throw ();

参数

bUnRegTypeLib
如果为 TRUE,则还取消注册类型库。

pCLSID
指向要取消注册的对象的 CLSID。 如果为 NULL(默认值),则取消注册对象映射中的所有对象。

返回值

标准 HRESULT 值。

注解

根据 pCLSID 参数,取消注册单个类对象或对象映射中的所有对象

对于 DLL,UnregisterServer 将由 DLLUnregisterServer 自动调用;对于使用 /UnregServer 命令行选项运行的 EXE,它将由 WinMain 调用。

有关如何将条目添加到对象映射的信息,请参阅 OBJECT_ENTRY_AUTO

CComModule::UpdateRegistryClass

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

ATL_DEPRECATED HRESULT UpdateRegistryClass(
    const CLSID& clsid,
    LPCTSTR lpszProgID,
    LPCTSTR lpszVerIndProgID,
    UINT nDescID,
    DWORD dwFlags,
    BOOL bRegister);

ATL_DEPRECATED HRESULT UpdateRegistryClass(
    const CLSID& clsid,
    LPCTSTR lpszProgID,
    LPCTSTR lpszVerIndProgID,
    LPCTSTR szDesc,
    DWORD dwFlags,
    BOOL bRegister);

参数

clsid
要注册或取消注册的对象的 CLSID。

lpszProgID
与对象关联的 ProgID。

lpszVerIndProgID
与对象关联的、与版本无关的 ProgID。

nDescID
对象说明的字符串资源的标识符。

szDesc
包含对象说明的字符串。

dwFlags
指定要在注册表中输入的线程模型。 可能的值为 THREADFLAGS_APARTMENT、THREADFLAGS_BOTH 或 AUTPRXFLAG。

bRegister
指示是否应注册对象。

返回值

标准 HRESULT 值。

备注

如果 bRegister 为 TRUE,则此方法将在系统注册表中输入对象的标准类注册

如果 bRegister 为 FALSE,则此方法将删除对象的注册

根据 bRegister 的值,UpdateRegistryClass 调用 RegisterClassHelperUnregisterClassHelper

如果指定 DECLARE_REGISTRY 宏,在处理对象映射时将自动调用 UpdateRegistryClass

CComModule::UpdateRegistryFromResourceD

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

virtual HRESULT UpdateRegistryFromResourceD(
    LPCTSTR lpszRes,
    BOOL bRegister,
    struct _ATL_REGMAP_ENTRY* pMapEntries = NULL) throw();

virtual HRESULT UpdateRegistryFromResourceD(
    UINT nResID,
    BOOL bRegister,
    struct _ATL_REGMAP_ENTRY* pMapEntries = NULL) throw ();

参数

lpszRes
[in] 资源名称。

nResID
[in] 资源 ID。

bRegister
[in] 指示是否应注册对象。

pMapEntries
[in] 指向替换映射的指针,该映射存储与脚本的可替换参数关联的值。 ATL 自动使用 %MODULE%。 若要使用其他可替换参数,请参阅“注解”了解详细信息。 否则,请使用 NULL 默认值。

返回值

标准 HRESULT 值。

注解

运行由 lpszRes 或 nResID 指定的资源中包含的脚本

如果 bRegister 为 TRUE,此方法将在系统注册表中注册对象;否则它会取消注册对象

如果指定 DECLARE_REGISTRY_RESOURCEDECLARE_REGISTRY_RESOURCEID 宏,在处理对象映射时将自动调用 UpdateRegistryFromResourceD

注意

若要在运行时进行替换值替换,请不要指定 DECLARE_REGISTRY_RESOURCE 或 DECLARE_REGISTRY_RESOURCEID 宏, 而应创建 _ATL_REGMAP_ENTRIES 结构的数组,其中的每个条目都包含一个变量占位符,该占位符与一个用于在运行时替换占位符的值配对。 然后调用 UpdateRegistryFromResourceD 并传递 pMapEntries 参数的数组。 这会将 _ATL_REGMAP_ENTRIES 结构中的所有替换值添加到注册器的替换映射中。

注意

若要静态链接到 ATL 注册表组件(注册器),请参阅 UpdateRegistryFromResourceS

有关可替换参数和脚本的详细信息,请参阅 ATL 注册表组件(注册器)一文。

CComModule::UpdateRegistryFromResourceS

从 ATL 7.0 开始,CComModule 已过时:有关更多详细信息,请参阅 ATL 模块类

virtual HRESULT UpdateRegistryFromResourceS(
    LPCTSTR lpszRes,
    BOOL bRegister,
    struct _ATL_REGMAP_ENTRY* pMapEntries = NULL) throw();

virtual HRESULT UpdateRegistryFromResourceS(
    UINT nResID,
    BOOL bRegister,
    struct _ATL_REGMAP_ENTRY* pMapEntries = NULL) throw();

参数

lpszRes
[in] 资源名称。

nResID
[in] 资源 ID。

bRegister
[in] 指示是否应注册资源脚本。

pMapEntries
[in] 指向替换映射的指针,该映射存储与脚本的可替换参数关联的值。 ATL 自动使用 %MODULE%。 若要使用其他可替换参数,请参阅“注解”了解详细信息。 否则,请使用 NULL 默认值。

返回值

标准 HRESULT 值。

备注

UpdateRegistryFromResourceD 类似,只不过 UpdateRegistryFromResourceS 会创建指向 ATL 注册表组件(注册器)的静态链接。

如果将 #define _ATL_STATIC_REGISTRY 添加到 pch.h(Visual Studio 2017 和更低版本中的 stdafx.h),则在处理对象映射时将自动调用 UpdateRegistryFromResourceS

注意

若要在运行时进行替换值替换,请不要指定 DECLARE_REGISTRY_RESOURCEDECLARE_REGISTRY_RESOURCEID 宏, 而应创建 _ATL_REGMAP_ENTRIES 结构的数组,其中的每个条目都包含一个变量占位符,该占位符与一个用于在运行时替换占位符的值配对。 然后调用 UpdateRegistryFromResourceS 并传递 pMapEntries 参数的数组。 这会将 _ATL_REGMAP_ENTRIES 结构中的所有替换值添加到注册器的替换映射中。

有关可替换参数和脚本的详细信息,请参阅 ATL 注册表组件(注册器)一文。

另请参阅

类概述