inno-setup - Inno Setup ParseVersion 不可从 [代码] 调用
问题描述
例如,宏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开始, the GetVersionComponents
)是一个预处理器函数。因此必须使用预处理器指令调用它,并将其结果存储到预处理器变量中。
#define Major
#define Minor
#define Rev
#define Build
#expr GetVersionComponents("C:\path\MyProg.exe", Major, Minor, Rev, Build)
如果您需要使用 Pascal Script 中的变量,则Code
再次需要使用预处理器语法。例如:
[Code]
function InitializeSetup: Boolean;
begin
MsgBox('Version is: {#Major}.{#Minor}.{#Rev}.{#Build}.', mbInformation, MB_OK);
Result := True;
end;
如果您真的想在编译时提取版本号,以上是正确的。如果您真的想在该Code
部分执行此操作,即在安装时,您必须使用Pascal 脚本支持功能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;
Pascal 脚本功能仅从Inno Setup 6.1GetVersionComponents
开始可用。
在这RemoveBackslash
两种情况下都有效,因为既有Pascal ScriptRemoveBackslash
又有PreprocessorRemoveBackslash
。
推荐阅读
- mongodb - 'average.$avg' 中的美元 ($) 前缀字段 '$avg' 对存储无效
- swift - 在 DLRadioButton 中设置一个选定的按钮
- java - Javafx 12 与 vscode-java
- graphql - GraphQL 建模:具有可变键的关联数组
- hadoop - Nutch FetchData 作业太慢
- typescript - 如何将事件监听器添加到 Figma currentPage
- spring-security - Spring Cloud oauth2 启用撤销令牌端点
- javascript - 如何使用 React 钩子将文件对象设置为状态?
- java - 启动活动时,应用程序可能在其主线程上做太多工作
- spring-boot - 如何将布尔值设置为 JSP 变量并在 .tag 类中对其进行验证