使用可替换参数(注册器预处理器)

可替换的参数允许注册器的客户端指定运行时数据。 为此,注册器会维护替换映射,在其中输入与脚本中可替换的参数关联的值。 注册器在运行时生成这些条目。

使用 %MODULE%

ATL 控件向导会自动生成使用 %MODULE% 的脚本。 ATL 将此可替换的参数用于服务器的 DLL 或 EXE 的实际位置。

将运行时数据与脚本数据连接起来

预处理器的另一个用途是将运行时数据与脚本数据连接起来。 例如,假设需要一个条目,其中包含模块的完整路径,并在末尾追加字符串“, 1”。 首先,定义以下扩展:

'MySampleKey' = s '%MODULE%, 1'

然后,在调用调用脚本中列出的脚本处理方法之一之前,向映射添加替换:

TCHAR szModule[_MAX_PATH];
::GetModuleFileName(_AtlBaseModule.GetModuleInstance(), szModule, _MAX_PATH);
p->AddReplacement(OLESTR("Module"), T2OLE(szModule));   

在分析脚本期间,注册器会扩展 '%MODULE%, 1'c:\mycode\mydll.dll, 1

注意

在注册器脚本中,4K 是最大令牌大小。 (令牌是语法中的任何可识别元素。)这包括由预处理器创建或扩展的令牌。

注意

若要在运行时替换替换值,请删除脚本中对 DECLARE_REGISTRY_RESOURCEDECLARE_REGISTRY_RESOURCEID 宏的调用。 请改将其替换为调用 CAtlModule::UpdateRegistryFromResourceDCAtlModule::UpdateRegistryFromResourceS 的自己的 UpdateRegistry 方法,并传递 _ATL_REGMAP_ENTRY 结构的数组。 _ATL_REGMAP_ENTRY 数组必须至少有一个设置为 {NULL,NULL} 的条目,并且此条目应始终为最后一个条目。 否则,调用 UpdateRegistryFromResource 时将生成访问冲突错误。

注意

生成输出可执行文件的项目时,ATL 会自动使用 %MODULE% 注册器脚本参数在运行时创建的路径名称周围添加引号。 如果不希望路径名称包含引号,请改用新的 %MODULE_RAW% 参数。

生成输出 DLL 的项目时,如果使用 %MODULE% 或 %MODULE_RAW%,ATL 将不会向路径名称添加引号。

另请参阅

创建注册器脚本