2016-03-31 25 views
1

我正在创建一个脚本方法库,只希望在需要时将它们包含在我的安装程序中。在Inno Setup Preprocessor中包含一次性功能?

某些方法需要使用其他方法,因此我将#include "filename.iss"用于需要它的方法所需的方法。

但是,如果我在包含通用文件的安装程序脚本文件中包含两个文件,则在包含它的第二个文件中会出现“Duplicate identifier”错误。

我寻找的东西像#include-once,但找不到任何结果。

要重现你可以只包括两次在同一个文件:

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

我可以看到,以避免这一点就是不要把包括与需要他们,只是将它们添加方法的文件的唯一方法在主安装程序脚本中。

我将方法文件顶部的includes包含在需要它们的地方,但是将它们评论出来 - 用于文档目的,并且可以方便地将它们复制并粘贴到主安装程序脚本中。不过,我更喜欢使用类似include-once的功能。

Inno Setup是否有类似include-once的方法或者测试已定义方法的方法,以便我可以创建类似的东西?

TIA

回答

2

用作C/C用于++相同的特技,所述include guard

在C和C++编程语言中,一个的#include后卫,有时称为宏后卫,是一个在处理include指令时用于避免双重包含问题的特定构造


环绕代码中包含的文件,#ifndef UniqueName#define UniqueName ...#endif

#ifndef IncludeIss 
#define IncludeIss 

procedure Test; 
begin 
end; 

#endif 

UniqueName通常是相同的文件名,与标点删除(使其有效的标识符)。即对于include.iss的名字可以是IncludeIss


请参阅Inno Setup Preprocessor: #ifdef, #ifndef, #ifexist, #ifnexist

+0

DOH!我应该想到 - thx! – Toby

0

有没有这样的事情,包括一次。

Inno Setup是基于Pascal的,其中功能(和程序)全球!没有私人的。

预处理符号被限定在.iss文件并使其全球使用公共关键字。

变量有真正令人不愉快的行为:如果您定义全局变量(在[代码]部分)与本地变量同名,您永远不知道该值是真正分配给哪个变量。

编译器不检查这是非常糟糕的。