在 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;