Inno Setup ParseVersion不可从[Code]调用



例如,宏ParseVersionRemoveBackslash都在ISPPBuiltins.iss中声明。如果我试图从[代码]内调用两者:

function InitializeSetup: Boolean;
var
Major, Minor, Rev, Build: Integer;
begin
RemoveBackslash('123');
ParseVersion('12345', Major, Minor, Rev, Build);
end;

RemoveBackslash编译良好,但添加ParseVersion会导致编译器错误:

未知标识符"ParseVersion">

当成为另一个宏声明的一部分时,ParseVersion似乎编译得很好,只是不是从[Code]编译的。我应该这样称呼它吗?

正如@Andrew所写,ParseVersion(或者实际上,自Inno Setup 6.1以来,GetVersionComponents(是一个预处理器函数。因此,必须使用预处理器指令调用它,并将结果存储到预处理器变量中。

#define Major
#define Minor
#define Rev
#define Build
#expr GetVersionComponents("C:pathMyProg.exe", Major, Minor, Rev, Build)

如果需要使用Pascal ScriptCode中的变量,则需要再次使用预处理器语法。例如:

[Code]
function InitializeSetup: Boolean;
begin
MsgBox('Version is: {#Major}.{#Minor}.{#Rev}.{#Build}.', mbInformation, MB_OK);
Result := True;
end;

如果您真的想在编译时提取版本号,则上述内容是正确的。如果您真的想在Code部分中完成,即在安装时,您必须使用Pascal Script支持函数GetVersionComponents(是的,名称相同,但语言不同(:

[Code]
function InitializeSetup: Boolean;
var
Major, Minor, Rev, Build: Word;
Msg: string;
begin
GetVersionComponents('C:pathMyProg.exe', Major, Minor, Rev, Build);
Msg := Format('Version is: %d.%d.%d.%d', [Major, Minor, Rev, Build]);
MsgBox(Msg, mbInformation, MB_OK);
Result := True;
end;

Pascal Script函数GetVersionComponents仅在Inno Setup 6.1之后可用。


RemoveBackslash在这两种上下文中都可以工作,因为同时存在Pascal脚本RemoveBackslash和预处理器RemoveBackslash

在变更日志(对于6.1.x(中提到:

支持函数GetFileVersionParseVersion已分别重命名为GetVersionNumbersStringGetVersionComponents。旧名称仍然受支持,但建议将脚本更新为新名称,否则编译器将发出警告。

所以在升级时要小心。但正如您正确地说的,这些是Inno Setup Preprocessor(ISPP(函数。关于Pascal Script部分,支持函数参考中没有列出任何内容。

其他人可能会对此有更多的了解,或者提供一个变通方法,但你可能必须在信息设置论坛中请求该功能。

相关内容

最新更新