我正在创建一个脚本方法库,只想在安装程序中需要时将它们包括在内。
有些方法需要使用其他方法,所以我将所需方法的#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]部分)与局部变量同名,你永远不知道值真正分配到了哪个变量中。
编译器不检查这个,这真的很糟糕。