在 Inno Setup 中实现脚本常量时出现“预期标识符”或“原型无效”

2024-05-06

因此,鉴于此功能,我在GetRoot := ROOTPage.Values[0];线。我希望它告诉我ROOTPage没有定义?

const
  DefaultRoot = 'C:\IAmGRoot';
Var
  ROOTPage : TInputQueryWizardPage;

procedure SetupRoot;
begin
  ROOTPage := CreateInputQueryPage(wpUserInfo,
    ExpandConstant('{cm:RootTitle}'), 
    ExpandConstant('{cm:RootInstructions}'),
    ExpandConstant('{cm:RootDescription}') + ' "' + DefaultRoot + '"'
    );
  
  ROOTPage.Add(ExpandConstant('{cm:SSRoot}') + ':', False);
  ROOTPage.Values[0] := ExpandConstant('{DefaultRoot}');

  // add SSROOT to path
end;

function GetRoot : string;
begin
  GetRoot := ROOTPage.Values[0];
end;

我该如何解释这个错误。 Pascal 中的标识符是什么?

This page http://wiki.freepascal.org/Identifiers告诉我标识符是变量名。也许我需要扩展ROOTPage.Values[0]在某种程度上,因为我从 Inno Setup 对象引用数组?

或者也许我需要以不同的方式返回值。我看见one page http://wiki.freepascal.org/Functions在 Pascal 上,您需要避免在无参数函数上分配函数值,以避免递归循环。这是否意味着我应该传递一个虚拟值?或者有不同的语法吗?该页面没有解释。

我暗自认为我真正的问题是我没有正确定义我的函数......但是好吧。至少可以编译这么多。这个问题可能会变成:如何处理 Pascal 中的无参数函数?

我不认为 Inno Setup 是问题的一部分,但我正在与 Inno Setup 合作,以防万一这很重要。


更新: 它似乎不是数组,因为这会出现相同的错误:

const
  DefaultRoot = 'C:\IAmGRoot';

function GetRoot : string;
begin
  GetRoot := DefaultRoot;
end;

更新: 这link http://www.functionx.com/objectpascal/Lesson11.htm已经说了函数名可以替换/应该用关键字替换Result比如下面的代码。我实际上知道这一点,但 Inno Setup 编译器不会将其识别为有效语法。然后它告诉我我的函数是一个无效的原型。

function GetRoot : string;
begin
  Result := DefaultRoot;
end;

更新: 如果我这样做,我会得到“Invalid Prototype for GetRoot”

function GetRoot : boolean;
begin
  Result := False;
end;

@Martin Prikryl 的更新:

我在几个地方使用过它,但典型的用法是这样的:

[Files]
Source: "C:\ValidPath\Release\*"; DestDir: "{app}\bin"; Components: DefinedComponent
Source: "C:\ValidPath\Deployment\*"; DestDir: "{code:GetRoot}\"; Flags: ignoreversion recursesubdirs; Components: DefinedComponent

预期标识符

您的代码在 Pascal 中是正确的,但在 Pascal 脚本中无法编译。

在 Pascal 中,当您想要分配函数的返回值时,可以将该值分配给具有函数名称的“变量”,或者将Result多变的。

所以这是正确的:

function GetRoot: string;
begin
  GetRoot := ROOTPage.Values[0];
end;

这也是(两者是等价的):

function GetRoot: string;
begin
  Result := ROOTPage.Values[0];
end;

在 Pascal 脚本中,只有Result作品。当您使用函数名称时,您会得到“需要标识符。”


原型无效

当从外部调用该函数时,您会得到这个Code部分和特定的参数列表/返回值是必需的。但你没有告诉我们,你用什么GetRoot函数为.

Inno Setup 中有两个地方可以使用自定义函数:

  • Check范围 https://jrsoftware.org/ishelp/index.php?topic=scriptcheck:为此,该函数必须返回一个Boolean并采用不带参数或采用一个参数(参数类型由您在Check范围)。

    function MyProgCheck(): Boolean;
    
    function MyDirCheck(DirName: String): Boolean;
    
  • 脚本常量 https://jrsoftware.org/ishelp/index.php?topic=scriptconstants:该函数必须返回一个string并拿一个string参数,即使脚本常量中没有提供参数。我认为这是您的用例。如果不需要任何参数,只需声明它,但不要使用它:

    function GetRoot(Param: String): string;
    begin
      Result := ROOTPage.Values[0];
    end;
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Inno Setup 中实现脚本常量时出现“预期标识符”或“原型无效” 的相关文章

  • C# 中的 false 运算符有什么用?

    C 中有两个奇怪的运算符 the 真算子 http msdn microsoft com en us library 6x6y6z4d aspx the 假算子 http msdn microsoft com en us library 6
  • 如何在gcc中打印UINT64_t?

    为什么这段代码不起作用 include
  • 该表达式的类型为 int,但此处与 unit 类型一起使用

    我试图在 F 中获得与此 vb net 代码完全相同的 非功能性的 Function FastPow ByVal num As Double ByVal exp As Integer As Double Dim res As Double
  • 如何比较表中最后一个和倒数第二个条目的值?

    我在 Oracle 中有一个名为quotes 的表 其中包含两列 date 和value 我想比较表中最后一个条目和倒数第二个条目的值 在此示例中 我想获取日期13 1 和 11 1在一行中以及每个日期的值之间的差异 10 5 5 报价表
  • C 中的复合语句表达式

    下面的代码不起作用 int i void 999 100 添加括号就可以了 为什么 int i void 999 100 还有另一种方法可以完成此类分配 int i void 999 100 是什么让他们与众不同 在这份声明中 int i
  • Inno Setup:仅在不是 VERYSILENT 的情况下安装

    仅当安装程序未以非常安静的方式运行时 我才想安装并注册某个文件 我不知道我怎样才能做到这一点 我当前的线路是 Source M sqlite36 engine dll DestDir sys Flags uninsneveruninstal
  • CSS变量名可以以数字开头吗?

    我想知道定义一个以这样的数字开头的 css 变量是否有效 root 1space 32px 这在 Chrome 上工作得很好 但是该代码没有经过验证https jigsaw w3 org css validator https jigsaw
  • 我应该使用函数还是无状态函子?

    这两段代码做同样的事情 如您所见 它将用于排序函数 哪个更好 我通常写后一种 但我看到一些程序员像以前那样做 struct val lessthan binary function
  • 如何确定函数是否不返回任何内容?

    有没有办法在 PHP 中使用反射或其他方法来做到这一点 function a return null function b a a null b b null 如果您没有显式返回某些内容 则函数将返回null默认情况下 这就是 PHP 中函
  • Javascript:通过将路径作为字符串传递给对象来获取对象的深层值[重复]

    这个问题在这里已经有答案了 可能的重复 使用字符串键访问嵌套的 JavaScript 对象 https stackoverflow com questions 6491463 accessing nested javascript obje
  • 接收字母并返回字母表中(从 0 开始)数字位置的 Python 函数

    我正在尝试创建一个 Python 函数 它接收一个字母 只有一个字母字符的字符串 并返回该字母在字母表中从 0 开始的数字位置 它不应该区分大小写 而且我不能使用导入 所以输入 a 应该返回 0 输入 A 也应该返回 0 输入 O 应该返回
  • 如何四舍五入到一半,始终为正方向? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何实现以下舍入 0 0126083
  • 如何创建不返回任何内容的函数

    我想写一个函数pl pgsql 我在用着Postgres 企业管理器 v3并使用 shell 来创建一个函数 但在 shell 中我必须定义返回类型 如果我不定义返回类型 我将无法创建函数 如何创建一个不返回结果的函数 即创建一个新表的函数
  • 在 SPSS 中生成语法的语法

    我正在尝试构建一个语法来在 SPSS 中生成语法 但我遇到了一些问题 我有一个包含元数据的 Excel 文件 我想使用它来创建一个语法来从中提取信息 就像这样 如果我有一个巨大的数据库 我只需要保持 Excel 更新 添加 删除变量 等等
  • 使用 MID、LEN 和 FIND 函数提取单元格文本的某些部分?

    我有一份 Excel 作业 但我陷入了最后部分 我被要求使用 MID LEN 和 FIND 来提取单元格内的特定字符串 我非常了解每个人的工作方式 将这三者结合起来并让它们发挥作用是我遇到的问题 我需要将城市与地址的其余部分分开 然后将其显
  • 如何获取 Python 中所有内置函数的列表?

    我正在尝试整理一个关于如何获取 Python 中所有内置函数的列表的规范示例 该文档很好 但我想用可证明的方法来演示它 在这里 我本质上将内置函数定义为默认命名空间的成员 这些成员可用且与旨在在模块中使用的函数的风格特征一致 即 它们提供一
  • 使用 Inno Setup 更快地创建安装程序

    当我在大量文件 gt 2GB 上运行 Inno Setup 时 需要很长时间才能运行 我相信它把时间花在了压缩上 这应该是 CPU 限制的 但它只使用了几个 CPU 有没有办法将其分散到 许多 更多核心 具体来说 我正在处理这个提升发布存储
  • C++:如何从函数返回shared_ptr

    当尝试从函数返回shared ptr时 我得到 对局部变量 recipe 的引用返回 Werror return local addr 我哪里做错了 shared ptr
  • LESS CSS 语法对现代化很有用

    通常我使用现代化 http modernizr com 了解浏览器的功能 同时 我用LESS CSS http lesscss org 使我的CSS更具可读性和可维护性 使用 LESS 嵌套规则的常见样式如下所示 header color
  • 我应该在构造函数中调用成员函数吗

    我知道这是一个相当简单的问题 并且还取决于代码的其余部分 但我对经验法则更感兴趣 那么什么情况下适合在构造函数中调用函数呢 更可取的是 ClassA obj1 obj1 memFun or ClassA obj1 where constru

随机推荐