在Inno Setup预处理器中包含一次功能



我正在创建一个脚本方法库,只想在安装程序中需要时将它们包括在内。

有些方法需要使用其他方法,所以我将所需方法的#include "filename.iss"与需要它的方法一起放在文件中

但是,如果我在一个安装程序脚本文件中包含两个文件,其中还包含一个公共文件,那么在包含该文件的第二个文件中会出现"Duplicate identifier"错误。

我已经搜索了类似#include-once的东西,但找不到任何结果。

要复制,您只需包含两次相同的文件:

#include "AddReplaceLinesInFile.iss"
#include "AddReplaceLinesInFile.iss"

我能看到的避免这种情况的唯一方法是不将includes与需要它们的方法一起放在文件中,只将它们添加到主安装程序脚本中。

我将includes放在需要它们的方法文件的顶部,但将它们注释掉——这是为了便于文档编制,并便于将它们复制和粘贴到我的主安装程序脚本中。不过,我更喜欢使用类似include-once的功能。

Inno Setup有类似include-once的东西吗?或者有一种测试已经定义的方法的方法,这样我就可以创建类似的东西了?

TIA

使用与C/C++中相同的技巧,include-guard:

在C和C++编程语言中,#include-guard(有时称为宏保护)是一种特殊的构造,用于在处理include指令时避免双包含的问题。


#ifndef UniqueName#define UniqueName…环绕随附文件中的代码。。。#endif:

#ifndef IncludeIss
#define IncludeIss
procedure Test;
begin
end;
#endif

UniqueName通常与文件名相同,去掉了标点符号(使其成为有效标识符)。即include.iss的名称可以是IncludeIss


请参阅Inno设置预处理器:#ifdef、#ifndef、#ifexist、#ifnextist。

没有include once这样的东西。

Inno Setup是基于Pascal的,其中函数(和过程)全局!没有私人的。

预处理器符号的作用域为.iss文件,要使其全局化,请使用public关键字。

变量有非常令人不快的行为:如果你定义全局变量(在[Code]部分)与局部变量同名,你永远不知道值真正分配到了哪个变量中。

编译器不检查这个,这真的很糟糕。

最新更新