例如,宏ParseVersion
和RemoveBackslash
都在中声明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:\path\MyProg.exe", Major, Minor, Rev, Build)
如果需要在Pascal脚本中使用变量,则Code
再次需要使用预处理器语法。例如:
[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:\path\MyProg.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;
仅GetVersionComponents
自Inno Setup 6.1起,Pascal脚本功能可用。
将RemoveBackslash
在两种情况下工作,因为有两个Pascal脚本RemoveBackslash
和预处理RemoveBackslash
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句