Function &引用;“需要标识符”;或;“无效原型”;在Inno设置中实现脚本常量时
因此,给定这个函数,我在Function &引用;“需要标识符”;或;“无效原型”;在Inno设置中实现脚本常量时,function,syntax,inno-setup,pascalscript,Function,Syntax,Inno Setup,Pascalscript,因此,给定这个函数,我在GetRoot:=ROOTPage.Values[0]上得到错误“Identifier Expected”行。我希望它告诉我,ROOTPage没有定义 const DefaultRoot='C:\IAmGRoot'; 变量 ROOTPage:TInputQueryWizardPage; 程序设置根; 开始 根页面:=CreateInputQueryPage(wpUserInfo, ExpandConstant({cm:RootTitle}'), ExpandConstan
GetRoot:=ROOTPage.Values[0]上得到错误“Identifier Expected”代码>行。我希望它告诉我,ROOTPage
没有定义
const
DefaultRoot='C:\IAmGRoot';
变量
ROOTPage:TInputQueryWizardPage;
程序设置根;
开始
根页面:=CreateInputQueryPage(wpUserInfo,
ExpandConstant({cm:RootTitle}'),
ExpandConstant({cm:RootInstructions}'),
ExpandConstant({cm:RootDescription}')++''+DefaultRoot++''
);
Add(ExpandConstant({cm:SSRoot}')+':',False);
值[0]:=ExpandConstant('{DefaultRoot}');
//将SSROOT添加到路径
结束;
函数GetRoot:string;
开始
GetRoot:=ROOTPage.value[0];
结束;
我应该如何解释这个错误。Pascal中的标识符是什么
这告诉我标识符是变量名。也许我需要以某种方式展开ROOTPage.Values[0]
,因为我引用的是来自Inno Setup对象的数组
或者我需要以不同的方式返回值。我在Pascal上看到,您需要避免在无参数函数上为函数值赋值,以避免递归循环。这是否意味着我应该传入一个伪值?还是有不同的语法?那一页没有解释
我私下认为我真正的问题是我没有正确定义我的函数。。。但是很好。至少有这么多是可以编译的这个问题可能变成:如何处理Pascal中的无参数函数?
我不认为Inno设置是问题的一部分,但我正在与Inno设置合作,以防这很重要
更新:
它似乎不是数组,因为这会得到相同的错误:
const
DefaultRoot='C:\IAmGRoot';
函数GetRoot:string;
开始
GetRoot:=DefaultRoot;
结束;
更新:
这说明函数名可以/应该替换为关键字Result
,如以下代码。我实际上知道这一点,但Inno安装编译器不认为这是有效的语法。然后它告诉我我的函数是一个无效的原型
函数GetRoot:string;
开始
结果:=DefaultRoot;
结束;
更新: 如果我这样做,我会得到“GetRoot的原型无效” 函数GetRoot:boolean; 开始 结果:=假; 结束;
@Martin Prikryl的更新: 我在一些地方使用过它,但典型的用法如下:
[文件]
来源:“C:\ValidPath\Release\*”;DestDir:“{app}\bin”;组件:定义的组件
来源:“C:\ValidPath\Deployment\*”;DestDir:“{code:GetRoot}\”;标志:IgnoreVersionRecurseSubdirs;组件:定义的组件
需要标识符
您的代码在Pascal中是正确的,但它不能在Pascal脚本中编译
在Pascal中,当您想要分配函数的返回值时,您可以将该值分配给带有函数名称的“变量”,或者分配给Result
变量
所以这是正确的:
函数GetRoot:string;
开始
GetRoot:=ROOTPage.value[0];
结束;
这也是(两者都是等效的):
函数GetRoot:string;
开始
结果:=ROOTPage.value[0];
结束;
在Pascal脚本中,只有结果
有效。当您使用函数名时,会得到“预期标识符”
无效原型 当从
code
部分的外部调用函数并且需要特定的参数列表/返回值时,您会得到这个结果。但是您没有告诉我们,您使用GetRoot
函数的目的是什么
有两个地方可以使用Inno Setup中的自定义函数:
- :为此,函数必须返回一个
,并且不接受任何参数或只接受一个参数(参数类型由您在布尔值
参数中提供的值确定)检查
函数MyProgCheck():布尔值; 函数MyDirCheck(DirName:String):布尔;
- :函数必须返回一个
,并获取一个字符串
参数,即使脚本常量中未提供任何参数。我假设这是您的用例。如果不需要任何参数,只需声明它,但不要使用它:字符串
函数GetRoot(参数:String):String; 开始 结果:=ROOTPage.value[0]; 结束;
Result
变量
所以这是正确的:
函数GetRoot:string;
开始
GetRoot:=ROOTPage.value[0];
结束;
这也是(两者都是等效的):
函数GetRoot:string;
开始
结果:=ROOTPage.value[0];
结束;
在Pascal脚本中,只有结果
有效。当您使用函数名时,会得到“预期标识符”
无效原型 当从
code
部分的外部调用函数并且需要特定的参数列表/返回值时,您会得到这个结果。但是您没有告诉我们,您使用GetRoot
函数的目的是什么
有两个地方可以使用Inno Setup中的自定义函数:
- :为此,函数必须返回一个
,并且不接受任何参数或只接受一个参数(参数类型由您在布尔值
参数中提供的值确定)检查
函数MyProgCheck():布尔值; 函数MyDirCheck(DirName:String):布尔;
- :函数必须返回一个
,并获取一个字符串
参数,即使脚本c中未提供任何参数字符串