您正在使用 Internet Explorer 6,在本页面的显示效果可能有差异。建议您升级到 Internet Explorer 8 或以下浏览器: Firefox / Chrome / Safari / Opera
首 页 文章Inno Inno预处理入门一:ISPP语法简介

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函数调用的注意事项:

  1. 如果有参数指定了参数名,那么其他的也得指定。如例子 3行 和 5行
  2. 参数指定了名字的情况下,跟顺序无关。如例子 3行 和 5行
  3. 因为此种特性,所以当你只想指定其中一个参数的名字的时候,需要像例子6行那样操作。此处的 (MyVar = 10) 是一个赋值操作
  4. 当然再进一步讲,逗号在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

返回顶部】 【打印此页】 【关闭