Delphi 在PascalScript中导入重载函数

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;

考虑到函数重载,如何确保PascalScript导入正确的函数(使用AddFunction()

对于exmaple,我要导入system.Random。 在EngineCompile事件中,我添加了以下内容:

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
的函数,然后将该新函数导出到脚本中。