在 Inno Setup Pascal 脚本中评估 运行 时间来自预处理器的数据集合
Evaluate a collection of data from preprocessor on run time in Inno Setup Pascal Script
我正在尝试让 Inno Setup 在 Code
部分定义值,但不使用 {#VersionTool1}
。我需要动态传递定义的名称,因为它们有很多(我想避免大的 switch case)。我试过 SetupSetting
但它不在设置部分(在它之前)。有什么办法吗?
#define VersionTool1 2019.01.1111
#define VersionTool2 2020.02.2111
...
[Code]
procedure SetSelectedTool(ToolName: String);
var
CurrentTool: string;
begin
...
CurrentTool := 'Version' + ToolName;
CurrentToolVersion := {#CurrentTool};
...
end;
局部变量 CurrentTool
的值例如是 'VersionTool1'
我想得到 VersionTool1
预处理器变量的值是 2020.02.2111
.
不可能,请参阅 。
但还有其他解决方案。
例如:
[Code]
var
ToolNames: TStringList;
ToolVersions: TStringList;
function InitializeSetup(): Boolean;
begin
ToolNames := TStringList.Create;
ToolVersions := TStringList.Create;
#define AddToolVersion(Name, Version) \
"ToolNames.Add('" + Name + "'); ToolVersions.Add('" + Version +"');"
#emit AddToolVersion('Tool1', '2019.01.1111')
#emit AddToolVersion('Tool2', '2020.02.2111')
{ ... }
Result := True;
end;
(当然,只有当你实际上不对版本号进行硬编码时,上面的内容才有意义,而是使用只有预处理器才能执行的代码——比如 GetStringFileInfo
,我从您的评论中了解到您打算)
然后你可以有一个像这样的函数:
function GetToolVersion(ToolName: string): string;
var
I: Integer;
begin
I := ToolNames.IndexOf(ToolName);
if I >= 0 then Result := ToolVersions[I];
end;
我正在尝试让 Inno Setup 在 Code
部分定义值,但不使用 {#VersionTool1}
。我需要动态传递定义的名称,因为它们有很多(我想避免大的 switch case)。我试过 SetupSetting
但它不在设置部分(在它之前)。有什么办法吗?
#define VersionTool1 2019.01.1111
#define VersionTool2 2020.02.2111
...
[Code]
procedure SetSelectedTool(ToolName: String);
var
CurrentTool: string;
begin
...
CurrentTool := 'Version' + ToolName;
CurrentToolVersion := {#CurrentTool};
...
end;
局部变量 CurrentTool
的值例如是 'VersionTool1'
我想得到 VersionTool1
预处理器变量的值是 2020.02.2111
.
不可能,请参阅
但还有其他解决方案。
例如:
[Code]
var
ToolNames: TStringList;
ToolVersions: TStringList;
function InitializeSetup(): Boolean;
begin
ToolNames := TStringList.Create;
ToolVersions := TStringList.Create;
#define AddToolVersion(Name, Version) \
"ToolNames.Add('" + Name + "'); ToolVersions.Add('" + Version +"');"
#emit AddToolVersion('Tool1', '2019.01.1111')
#emit AddToolVersion('Tool2', '2020.02.2111')
{ ... }
Result := True;
end;
(当然,只有当你实际上不对版本号进行硬编码时,上面的内容才有意义,而是使用只有预处理器才能执行的代码——比如 GetStringFileInfo
,我从您的评论中了解到您打算)
然后你可以有一个像这样的函数:
function GetToolVersion(ToolName: string): string;
var
I: Integer;
begin
I := ToolNames.IndexOf(ToolName);
if I >= 0 then Result := ToolVersions[I];
end;