如何迭代Inno-Setup预处理器阵列?

时间:2013-02-06 12:03:54

标签: inno-setup

我有一个像这样定义的Inno Setuo预处理器数组

#dim MYARRAY[3]
#define MYARRAY[0] 'foo'
#define MYARRAY[1] 'bar'
#define MYARRAY[1] 'baz'

不,我想迭代该数组并将其内容放入我的翻译中,例如(非工作):

#define i 0
#define NUMBERELEMENTS 3

#for {i = 0; i < NUMBERELEMENTS; i++} {#MYARRAY[i]}

我发现以下内容正在发挥作用,但这是唯一可行的方法吗?使用i作为“全局”变量,使用#sub感觉和简单感觉是错误的。

#sub mysub
    {#MYARRAY[i]}
#endsub
#for {i = 0; i < NUMBERELEMENTS; i++} mysub

修改

令我困惑的是,以下内容在翻译中没有产生任何内容:

#define GetElement() MYARRAY[i]
#for {i = 0; i < NUMBERELEMENTS; i++} GetElement(i)

我希望它在翻译中为每个MYARRAY元素生成一行内容。

1 个答案:

答案 0 :(得分:0)

在这种情况下,#sub是唯一可行的。行当前只能通过先前定义的#sub或通过#emit输出到翻译,后者是一个语句,不能从表达式上下文中调用。

请注意,在for循环之后定义sub和#define private i之前,可以使用#undef i来缓解“icky全局变量”的感觉。

issue has been filed加强ISPP;你可以尝试在那里添加你的声音。

另外,我已经有了一个完成此类操作的脚本(通过CurStepChanged d文件挂钩到#include);它尚未准备好供公众使用但我计划在第二天或第二天将其清理并在线发布。因此,如果您可以坚持一段时间,那么您可以查看或使用它。 (我会在发布后用链接编辑我的答案。)