Delphi 在PascalScript中导入重载函数
考虑到函数重载,如何确保PascalScript导入正确的函数(使用AddFunction()) 对于exmaple,我要导入system.Random。 在EngineCompile事件中,我添加了以下内容:Delphi 在PascalScript中导入重载函数,delphi,overloading,pascalscript,Delphi,Overloading,Pascalscript,考虑到函数重载,如何确保PascalScript导入正确的函数(使用AddFunction()) 对于exmaple,我要导入system.Random。 在EngineCompile事件中,我添加了以下内容: AddFunction( @System.Random, 'function Random: Extended;' ); 但是当测试一个随机调用的脚本时,我总是得到NAN 我的测试脚本是 Program Script; Var a: Single; Check: String;
AddFunction( @System.Random, 'function Random: Extended;' );
但是当测试一个随机调用的脚本时,我总是得到NAN
我的测试脚本是
Program Script;
Var
a: Single;
Check: String;
Begin
a := Random;
Check := FloatToStr(a);
ShowMessage(Check);
End.
我有一种强烈的感觉,PascalScript导入了另一个版本的random。
您认为如何?在每个可能的重载上设置一个断点(在System.pas中,对于这种特殊情况)。执行脚本。查看调试器在哪个位置停止。我就是这样做的: 汇编:
psc.AddDelphiFunction('function Random(const ARange: Integer): Integer');
psc.AddDelphiFunction('function Random2: Extended');
运行时:
type TRandom2 = function: Extended;
var Random2: TRandom2;
pse.RegisterDelphiFunction(@Random,'Random',cdRegister);
Random2:=Random;
pse.RegisterDelphiFunction(@Random2,'Random2',cdRegister);
我用一个类型定义强制了“Random:Extended”。我用另一个名称对正确的版本进行了函数调用,然后它突然工作了。这里有趣的是,一般来说,使一个过程指针指向一个重载函数总是返回声明的第一个函数……我想知道是否有其他方法迫使编译器使用函数的一个或另一个版本?我不知道“另一个名称的正确版本”是什么意思<代码>系统。随机只有一个名称。您可以在脚本中使用不同的名称,但这不会影响表达式
@System.Random
在Delphi中的解析。我的意思是@System.Random总是返回指向Random(ARange:Integer):Integer的指针,而不是另一个的地址。我明白了。您在其中编写了另一个名为Random
的函数,然后将该新函数导出到脚本中。