Inno Setup中的#emit指令有什么意义?

康斯坦丁

以下是#emit指令文档中的示例

[Files]
#emit 'Source: "file1.ext"; DestDir: {' + MyDestDir + '}'
Source: "file2.ext"; DestDir: {#MyDestDir}
#emit GenerateVisualCppFilesEntries ; user defined function

在第一行中,我不了解该DestDir部分。看起来#那里缺少符号。

我了解第二行。但是为什么我们仍然需要#emit像第1行一样使用指令?

马丁·普里克里(Martin Prikryl)

可以使用两种语法来调用Inno Setup预处理程序指令

基本语法:

#directive params

以及内联语法:

{#directive params}

最重要的是,该#emit伪指令是默认的内联伪指令(假定未指定显式伪指令名称时)。


所以这三个是等效的:

#emit MyDestDir
{#emit MyDestDir}
{#MyDestDir}

尽管第一个对于路径变量没有意义,因为它会导致无效的脚本语法–但可以将其与包含有效脚本语法的变量一起使用:

#define FileSectionEntry 'Source: ' + MySource + '; DestDir: ' + MyDestDir
#emit FileSectionEntry

尽管其他两个内联示例可能有意义,但仅适用于同一行中的其他代码,例如您问题中的代码:

Source: "file2.ext"; DestDir: {#MyDestDir}

另外,#emit带有(字符串)常量的基本上是没有意义的,因为无需预处理程序就可以实现相同的目的。

这三个是等效的:

Source: "file2.ext"; DestDir: "{app}"
#emit 'Source: "file2.ext"; DestDir: "{app}"'
{#'Source: "file2.ext"; DestDir: "{app}"'}

因此,回到脚本中的代码,它们几乎是等效的:

#emit 'Source: "file1.ext"; DestDir: {' + MyDestDir + '}'
Source: "file1.ext"; DestDir: {#MyDestDir}

唯一的问题是,我认为第一行中的大括号不应该存在。该行应为:

#emit 'Source: "file1.ext"; DestDir: ' + MyDestDir

我已经为此提交了修复程序这基本上是您上一个问题中错别字的另一个副本:为什么在Inno Setup Preprocessor:#emit页面上还有一对花括号?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章