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 代码生成向导现在使用 CAtlAutoThreadModule 和 CAtlModule 派生类。 有关详细信息,请参阅 ATL 模块类。 以下信息适用于使用较旧 ATL 版本创建的应用程序。 ATL 仍包含 CComModule
以实现后向兼容。
CComModule
实现一个 COM 服务器模块,允许客户端访问模块的组件。 CComModule
支持 DLL(进程内)和 EXE(本地)模块。
CComModule
实例使用对象映射来维护一组类对象定义。 此对象映射实现为 _ATL_OBJMAP_ENTRY
结构的数组,包含用于以下目的的信息:
在系统注册表中输入和删除对象说明。
通过类工厂实例化对象。
在客户端与组件中的根对象之间建立通信。
执行类对象的生存期管理。
当你运行 ATL COM AppWizard 时,向导会自动生成 _Module
、CComModule
的全局实例或从它派生的类。 有关 ATL 项目向导的详细信息,请参阅创建 ATL 项目一文。
除了 CComModule
以外,ATL 还提供 CComAutoThreadModule,用于为 EXE 和 Windows 服务实现单元模型模块。 要在多个单元中创建对象时,请从 CComAutoThreadModule
派生模块。
继承层次结构
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] 传递给 DLLMain
或 WinMain
的 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
设置为传递给 DLLMain
或 WinMain
的句柄。
CComModule::m_hInstResource
从 ATL 7.0 开始,CComModule
已过时:有关更多详细信息,请参阅 ATL 模块类。
HINSTANCE m_hInstResource;
注解
默认包含模块实例的句柄。
Init 方法将 m_hInstResource
设置为传递给 DLLMain
或 WinMain
的句柄。 可将 m_hInstResource
显式设置为资源的句柄。
GetResourceInstance 方法返回存储在 m_hInstResource
中的句柄。
CComModule::m_hInstTypeLib
从 ATL 7.0 开始,CComModule
已过时:有关更多详细信息,请参阅 ATL 模块类。
HINSTANCE m_hInstTypeLib;
注解
默认包含模块实例的句柄。
Init 方法将 m_hInstTypeLib
设置为传递给 DLLMain
或 WinMain
的句柄。 可将 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
调用 RegisterClassHelper 或 UnregisterClassHelper。
如果指定 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_RESOURCE 或 DECLARE_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_RESOURCE 或 DECLARE_REGISTRY_RESOURCEID 宏, 而应创建 _ATL_REGMAP_ENTRIES
结构的数组,其中的每个条目都包含一个变量占位符,该占位符与一个用于在运行时替换占位符的值配对。 然后调用 UpdateRegistryFromResourceS
并传递 pMapEntries 参数的数组。 这会将 _ATL_REGMAP_ENTRIES
结构中的所有替换值添加到注册器的替换映射中。
有关可替换参数和脚本的详细信息,请参阅 ATL 注册表组件(注册器)一文。