无法从 #define 预处理器定义的数组中读取 Inno Setup Pascal 脚本中的值

问题描述 投票:0回答:1

我尝试从使用

#define
预处理器声明的数组中读取值。我已经通过以下方式做到了

#dim MYARRAY[2]
#define MYARRAY[0] 'foo'
#define MYARRAY[1] 'bar'
#define MYARRAY_SIZE 2

[Code]

procedure do_something();
var
    I: Integer;
begin
    for I := 0 to {#MYARRAY_SIZE} do
    begin
        SuppressibleMsgBox('{#MYARRAY[I]}', mbInformation, MB_OK, IDOK);
    end;
end;

不幸的是,我在编译时遇到以下错误

未声明的标识符:I

有什么想法可以解决这个问题吗?

inno-setup
1个回答
2
投票

您无法访问 Pascal 脚本索引中的预处理器定义的数组,请记住 Pascal 脚本是在运行时执行的,而预处理器代码是在安装程序编译之前解释的,就像 C 预处理器一样。

因此,要访问数组元素,您必须使用预处理器

for
循环,它将生成传递给编译器的实际代码。以您的代码示例为例,它可能类似于:

#dim MYARRAY[2]
#define MYARRAY[0] "foo"
#define MYARRAY[1] "bar"

[code]
procedure do_something();
begin
#sub SupMsg
  SuppressibleMsgBox('{#MYARRAY[I]}', mbInformation, MB_OK, IDOK);
#endsub  
#define I
#for {I = 0; I < DimOf(MYARRAY); I++} SupMsg
end;

编译脚本时,预处理器代码将被解释并执行,并且您将获得在预处理器输出中生成的结果,其中将包含对每个元素的

SuppressibleMsgBox
的调用,在本例中:

procedure do_something();
begin
  SuppressibleMsgBox('foo', mbInformation, MB_OK, IDOK);
  SuppressibleMsgBox('bar', mbInformation, MB_OK, IDOK);
end;
© www.soinside.com 2019 - 2024. All rights reserved.