注册表宏
这些宏定义有用的类型库和注册表设施。
名称 | 描述 |
---|---|
_ATL_STATIC_REGISTRY | 指示你希望对象的注册代码位于对象中,避免对 ATL.DLL 的依赖。 |
DECLARE_LIBID | 提供一个供 ATL 获取类型库的 libid 的方法。 |
DECLARE_NO_REGISTRY | 避免默认的 ATL 注册。 |
DECLARE_REGISTRY | 在系统注册表中输入或删除主对象的条目。 |
DECLARE_REGISTRY_APPID_RESOURCEID | 指定自动注册 appid 所需的信息。 |
DECLARE_REGISTRY_RESOURCE | 查找命名资源并在其中运行注册表脚本。 |
DECLARE_REGISTRY_RESOURCEID | 查找 ID 号标识的资源,并在其中运行注册表脚本。 |
要求
标头:atlcom.h
_ATL_STATIC_REGISTRY
一个符号,指示你希望对象的注册代码位于对象中,避免对 ATL.DLL 的依赖。
#define _ATL_STATIC_REGISTRY
备注
定义 ATL_STATIC_REGISTRY 时,应使用以下代码:
#ifdef _ATL_STATIC_REGISTRY
#include <statreg.h>
#endif
DECLARE_LIBID
提供一个供 ATL 获取类型库的 libid 的方法。
DECLARE_LIBID( libid )
参数
libid
类型库的 GUID。
备注
在 CAtlModuleT
派生类中使用 DECLARE_LIBID。
示例
非特性化向导生成的 ATL 项目将有一个使用此宏的示例。
DECLARE_NO_REGISTRY
如果要避免在其中会出现此宏的类的任何默认 ATL 注册,请使用 DECLARE_NO_REGISTRY。
DECLARE_NO_REGISTRY()
DECLARE_REGISTRY
在系统注册表中输入标准类注册,或将其从系统注册表中删除。
DECLARE_REGISTRY(
class,
pid,
vpid,
nid,
flags )
参数
class
[in] 为实现后向兼容性而包含在内。
pid
[in] 一个 LPCTSTR,特定于版本的程序标识符。
vpid
[in] 一个 LPCTSTR,是独立于版本的程序标识符。
nid
[in] 一个 UINT,是注册表中要用作程序说明的资源字符串的索引。
flags
[in] 一个 DWORD,在注册表中包含程序的线程模型。 必须是下列值之一:THREADFLAGS_APARTMENT、THREADFLAGS_BOTH、AUTPRXFLAG。
注解
标准注册包括 CLSID、程序 ID、独立于版本的程序 ID、说明字符串和线程模型。
使用 ATL 添加类向导来创建对象或控件时,向导会自动实现基于脚本的注册表支持,并将 DECLARE_REGISTRY_RESOURCEID 宏添加到文件中。 如果不想要基于脚本的注册表支持,则需将此宏替换为 DECLARE_REGISTRY。 DECLARE_REGISTRY 仅将上述五个基本密钥插入注册表中。 必须手动编写代码以将其他密钥插入注册表中。
DECLARE_REGISTRY_APPID_RESOURCEID
指定自动注册 appid 所需的信息。
DECLARE_REGISTRY_APPID_RESOURCEID(
resid,
appid )
参数
resid
.rgs 文件的资源 ID,其中包含有关 appid 的信息。
appid
一个 GUID。
注解
在 CAtlModuleT
派生类中使用 DECLARE_REGISTRY_APPID_RESOURCEID。
示例
使用添加类代码向导添加到 ATL 项目的类将有一个使用此宏的示例。
DECLARE_REGISTRY_RESOURCE
获取包含注册表文件的命名资源,并运行脚本,以在系统注册表中输入对象或将其从系统注册表中删除。
DECLARE_REGISTRY_RESOURCE( x )
参数
x
[in] 资源的字符串标识符。
备注
使用 ATL 项目向导创建对象或控件时,向导会自动实现基于脚本的注册表支持,并将类似于 DECLARE_REGISTRY_RESOURCE 的 DECLARE_REGISTRY_RESOURCEID 宏添加到文件中。
可以静态链接到 ATL 注册表组件(注册器),以便优化注册表访问。 若要静态链接到注册器代码,请将以下行添加到 pch.h 文件(在 Visual Studio 2017 及更低版本中为 stdafx.h 文件):
#define _ATL_STATIC_REGISTRY
如果希望 ATL 在运行时进行替换值替换,请不要指定 DECLARE_REGISTRY_RESOURCE 或 DECLARE_REGISTRY_RESOURCEID 宏, 而应创建 _ATL_REGMAP_ENTRIES
结构的数组,其中的每个条目都包含一个变量占位符,该占位符与一个用于在运行时替换占位符的值配对。 然后调用 CAtlModule::UpdateRegistryFromResourceD 或 CAtlModule::UpdateRegistryFromResourceS,传递数组。 这会将 _ATL_REGMAP_ENTRIES
结构中的所有替换值添加到注册器的替换映射中。
有关可替换参数和脚本的详细信息,请参阅 ATL 注册表组件(注册器)一文。
DECLARE_REGISTRY_RESOURCEID
与 DECLARE_REGISTRY_RESOURCE 相同,只不过它使用向导生成的 UINT 而不是使用字符串名称来标识资源。
DECLARE_REGISTRY_RESOURCEID( x )
参数
x
[in] 资源的向导生成的标识符。
注解
使用 ATL 项目向导来创建对象或控件时,向导会自动实现基于脚本的注册表支持,并将 DECLARE_REGISTRY_RESOURCEID 宏添加到文件中。
可以静态链接到 ATL 注册表组件(注册器),以便优化注册表访问。 若要静态链接到注册器代码,请将以下行添加到 stdafx.h 文件(在 Visual Studio 2019 及更高版本中为 pch.h 文件):
#define _ATL_STATIC_REGISTRY
如果希望 ATL 在运行时进行替换值替换,请不要指定 DECLARE_REGISTRY_RESOURCE 或 DECLARE_REGISTRY_RESOURCEID 宏, 而应创建 _ATL_REGMAP_ENTRIES
结构的数组,其中的每个条目都包含一个变量占位符,该占位符与一个用于在运行时替换占位符的值配对。 然后调用 CAtlModule::UpdateRegistryFromResourceD 或 CAtlModule::UpdateRegistryFromResourceS,传递数组。 这会将 _ATL_REGMAP_ENTRIES
结构中的所有替换值添加到注册器的替换映射中。
有关可替换参数和脚本的详细信息,请参阅 ATL 注册表组件(注册器)一文。