Inno预处理入门一:ISPP语法简介
一直以来都有朋友问我ISPP如何入门,如何编写。故此写了本系列教程。欢迎大家参与Inno预处理的大家庭。首先就来介绍下ISPP的基本语法吧。
ISPP是Inno的可选组件,全称:Inno Setup Preprocessor(中文:Inno Setup 预处理器)。预处理也就是说ISPP是在编译的时候执行的。相当是预先对脚本处理并最终生成了一个全新的脚本。
ISPP使用的是类似C/C++风格的语法习惯。支持 变量声明,变量赋值,条件表达式,数组,函数,宏。
ISPP支持在Inno脚本的任意位置出现。如果是单行的情况下只需要以# 开头即可。如果是在行中间,可以这样写:{#emit 你的变量名} ,而通常情况下emit可以省略,所以你也可以这样写{#你的变量名}。例如:
1 #define KngStr "我是KngStr"
2#define Myfile "myfile.txt"
3
4[Setup]
5AppName={#KngStr}
6
7[Files]
8Source: "{#Myfile}"; DestDir: "{app}";
9
10[Code]
11function InitializeSetup(): Boolean;
12begin
13 MsgBox('{#KngStr}', mbInformation, MB_OK);
14end;
ISPP包含三种数据类型:void(空), integer(整型) and string(字符串)。void仅在define定义变量的时候存在,可使用ifdef指令或者Defined函数对该变量进行判断。例如:
1 #define KngStr
2
3#ifdef KngStr
4#endif
ISPP的宏。在ISPP中,宏的定义很简单。只是在定义普通变量的基础上,变量名后面加上括号。如:
#define MyMacro(int A = 2, int B = 2) A + B
这里就定义了一个名为MyMacro的宏。且有两个整型的参数。int 代表了整型,= 2 代表了变量拥有默认值2。故此,调用的时候支持以下方式:
1#emit MyMacro(5, 10) ;A = 5, B = 10
2#emit MyMacro(3) ;A = 3, B = 2
3#emit MyMacro(A = 5, B = 10) ;A = 5, B = 10
4#emit MyMacro(B = 3) ;A = 2, B = 3
5#emit MyMacro(B = 10, A = 5) ;A = 5, B = 10
6#emit MyMacro((MyVar = 10), 5) ;A = 10, B = 5
7#emit MyMacro((SaveToFile("script.txt"), 5), 10)
注意:ISPP函数调用的注意事项:
- 如果有参数指定了参数名,那么其他的也得指定。如例子 3行 和 5行
- 参数指定了名字的情况下,跟顺序无关。如例子 3行 和 5行
- 因为此种特性,所以当你只想指定其中一个参数的名字的时候,需要像例子6行那样操作。此处的
是一个赋值操作(MyVar = 10)
- 当然再进一步讲,逗号在ISPP中相当于Code中的分号,也就有了第七行的操作。事实上
SaveToFile("script.txt")
和当前操作完全无关。
ISPP的注释。作为一个脚本语言,注释是必不可少的。因为他增加了可读性,也更方便程序员直接进行传播。通常他会显示为绿色。直接看例子吧:
1
2#emit Var1 /* this is a comment */ + Var2 /* this is a comment */
3
4#emit Var1 + Var2 ; this is a comment
5
6#emit Var1 + Var2 ; this is \
7 a comment