首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Inno安装前处理器中包含一次功能?

在Inno安装前处理器中包含一次功能?
EN

Stack Overflow用户
提问于 2016-03-31 23:34:01
回答 2查看 393关注 0票数 1

我正在创建一个脚本方法库,只希望在需要时将它们包含在我的安装程序中。

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

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

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

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

代码语言:javascript
复制
#include "AddReplaceLinesInFile.iss"
#include "AddReplaceLinesInFile.iss"

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

我把包含放在需要它们的方法文件的顶部,但是注释掉它们--为了文档的目的,并使复制它们和粘贴到我的主安装程序脚本变得容易。然而,我更喜欢使用类似于include-once功能的东西。

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

提亚

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-01 06:17:19

使用与C/C++ ( 包括护卫 )相同的技巧

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

#ifndef UniqueName#define UniqueName . #endif包围包含的文件中的代码

代码语言:javascript
复制
#ifndef IncludeIss
#define IncludeIss

procedure Test;
begin
end;

#endif

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

安装前处理器:#ifdef,#ifndef,#ifexist,#ifnexist

票数 3
EN

Stack Overflow用户

发布于 2016-04-01 05:29:42

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

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

预处理符号的作用域为.iss文件,并使它们全局使用公共关键字。

变量有非常令人不快的行为:如果您使用与局部变量同名的全局变量(在代码部分)定义全局变量,则永远不知道该值真正分配到哪个变量中。

编译器不会检查这一点,这是非常糟糕的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36345601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档