Inno setup Inno设置-如何在[代码]中使用预处理器指令?

Inno setup Inno设置-如何在[代码]中使用预处理器指令?,inno-setup,pascalscript,Inno Setup,Pascalscript,我觉得这应该是我所缺少的一些简单的东西——在Inno设置中,如果我传入了一个指令变量,我如何在[code]部分中使用它 假设我将/DMYVAR=1传递到Inno设置引擎 在我的.iss文件中,我可以有如下内容: [Setup] AppName=MyApp v{#MYVAR} 在我的[code]部分,我希望能够像这样使用它: 函数IsVersionOne(参数:字符串):布尔值; 开始 结果:={#MYVAR}==“1”; 结束; 这不起作用:(预处理器不关心它的指令在哪里展开 所以{#nam

我觉得这应该是我所缺少的一些简单的东西——在Inno设置中,如果我传入了一个指令变量,我如何在
[code]
部分中使用它

假设我将
/DMYVAR=1
传递到Inno设置引擎

在我的.iss文件中,我可以有如下内容:

[Setup]
AppName=MyApp v{#MYVAR}
在我的
[code]
部分,我希望能够像这样使用它:

函数IsVersionOne(参数:字符串):布尔值;
开始
结果:={#MYVAR}==“1”;
结束;

这不起作用:(

预处理器不关心它的指令在哪里展开

所以
{#name}
syntax()可以在任何地方工作,包括Pascal脚本

不过,如果要将
值定义为字符串进行比较,当然必须将其括在引号中以使其成为字符串。还要注意,您的
==“1”
语法错误,Pascal使用单引号和单引号

函数IsVersionOne(参数:字符串):布尔值;
开始
结果:='{#MYVAR}'='1';
结束;
#expr SaveToFile(AddBackslash(SourcePath)+“Preprocessed.iss”)
使用
/DMYVAR=1
运行编译器,并检查生成的
预处理.iss
。它将显示:

[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
[Files]
函数IsVersionOne(参数:字符串):布尔值;
开始
结果:='1'='1';
结束;
由于该值是一个数字,您当然也可以使用数字比较:

函数IsVersionOne(参数:字符串):布尔值;
开始
结果:={#MYVAR}=1;
结束;

有关更详细信息的相关问题,请参阅


虽然上面回答了您的字面问题,但您的
函数
签名实际上表明您希望实现一个测试编译时指令的值,如:

[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"; Check: IsVersionOne
这是一种低效的过度杀伤力

请改为使用:

如果使用
/DMYVAR=1
运行编译器,
预处理。iss
将显示:

[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
[Files]
如果使用不同的值
DMYVAR
运行编译器,
Preprocessed.iss
将显示:

[Files]
Source: "MYPROG.EXE"; DestDir: "{app}"
[Files]
如果即使没有
/DMYVAR=
开关也需要编译脚本,请在脚本顶部定义一个默认值,如:

#ifndef MYVAR
#define MYVAR "0"
#endif