【发布时间】:2016-12-09 23:47:03
【问题描述】:
我正在使用 Inno Setup #define 指令在我的安装程序中定义有关软件包的所有信息,然后使用其他指令来提取该字符串的一部分。因此,例如,使用以下代码,PartNumber(Package1) 将返回 05414。
#define Package1 "05414 - My Package"
#define PartNumber(str Package) Copy(Package, 1, 5)
我在脚本和代码中使用了这种方法,效果很好。但是,我遇到了一种情况,以编程方式生成字符串会很方便,但我无法让它工作。例如,我想做如下的事情。
procedure Foo(Package: String);
var
PartNumber: String;
begin
PartNumber:= ExpandConstant(Format('{#PartNumber(%s)}', [Package]));
end;
procedure Bar();
begin
Foo(ExpandConstant('{#Package1)}'));
end;
Foo 的 Package 参数是正确的,但我收到编译器错误提示
[ISPP] 格式“%”没有参数。
它似乎不喜欢PartNumber 行上的字符串中的#。即使在普通字符串中包含# 也会出现“未终止的预处理器指令”错误,所以我认为它会将# 解释为精度说明符或其他东西。
有没有办法让它将# 视为文本的一部分,以便我可以以编程方式扩展此常量?如果没有,是否有其他方法可以实现?
【问题讨论】:
-
我假设
Foo(ExpandConstant('{#Package1}'));,没有右括号。和它一样,它不会编译。
标签: inno-setup