我尝试从使用
#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
SuprpressibleMsgBox('{#MYARRAY[I]}', mbInformation, MB_OK, IDOK);
end;
end;
不幸的是,我在编译时遇到以下错误
未声明的标识符:I
有什么想法可以解决这个问题吗?
您无法在 pascal 脚本索引中访问预处理器定义的数组,请记住 pascal 脚本是在运行时执行的,而预处理器代码是在安装程序编译之前解释的,就像 c 预处理器一样。
因此,要访问数组元素,您必须使用预处理器
for
循环,它将生成传递给编译器的实际代码。以您的代码示例为例,它可能类似于:
#dim MYARRAY[2]
#define MYARRAY[0] "foo"
#define MYARRAY[1] "bar"
[code]
procedure do_something();
begin
#sub SupMsg
SuprpressibleMsgBox('{#MYARRAY[I]}', mbInformation, MB_OK, IDOK);
#endsub
#for {I = 0; I < DimOf(MYARRAY); I++} SupMsg
end;
编译脚本时,预处理器代码将被解释并执行,您将获得在
Preprocessed.iss
中生成的结果,其中将包含对每个元素的 SuprpressibleMsgBox
的调用,在本例中:
procedure do_something();
begin
SuprpressibleMsgBox('foo', mbInformation, MB_OK, IDOK);
SuprpressibleMsgBox('bar', mbInformation, MB_OK, IDOK);
end;