注册表宏

这些宏定义有用的类型库和注册表设施。

名称 描述
_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::UpdateRegistryFromResourceDCAtlModule::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::UpdateRegistryFromResourceDCAtlModule::UpdateRegistryFromResourceS,传递数组。 这会将 _ATL_REGMAP_ENTRIES 结构中的所有替换值添加到注册器的替换映射中。

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

另请参阅