Dan*_*Dan 5 inno-setup pascalscript
例如,宏ParseVersion
和RemoveBackslash
都在 中声明ISPPBuiltins.iss
。如果我尝试从 [Code] 中调用两者:
function InitializeSetup: Boolean;
var
Major, Minor, Rev, Build: Integer;
begin
RemoveBackslash('123\');
ParseVersion('12345', Major, Minor, Rev, Build);
end;
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
如果您需要在 Pascal Script 中使用变量Code
,则再次需要使用预处理器语法。例如:
#define Major
#define Minor
#define Rev
#define Build
#expr GetVersionComponents("C:\path\MyProg.exe", Major, Minor, Rev, Build)
Run Code Online (Sandbox Code Playgroud)
如果您确实想在编译时提取版本号,则上述情况是正确的。如果您确实想在本Code
节中执行此操作,即在安装时执行此操作,则必须使用Pascal Script 支持功能GetVersionComponents
(是的,名称相同,但语言不同):
[Code]
function InitializeSetup: Boolean;
begin
MsgBox('Version is: {#Major}.{#Minor}.{#Rev}.{#Build}.', mbInformation, MB_OK);
Result := True;
end;
Run Code Online (Sandbox Code Playgroud)
Pascal Script 函数仅从Inno Setup 6.1GetVersionComponents
起可用。
这RemoveBackslash
在两种情况下都有效,因为同时存在Pascal ScriptRemoveBackslash
和PreprocessorRemoveBackslash
。
归档时间: |
|
查看次数: |
150 次 |
最近记录: |