1

应该如何将接口实现“注入”到脚本中?假设我在 TdwsUnit 中定义了一个接口类型,比如

IFoo = interface
  procedure Bar;
end;

现在我该如何实现一个array of IFoo在脚本中返回(或 IFoo 列表甚至单个 IFoo )的函数?

我尝试将一个 IFoo 项目添加到Instances该单元的集合中,但这导致了错误:

语法错误:TdwsUnit: "uTest" -- TdwsInstance: "tmp" -- AutoInstantiate 为真,但 DataType "IFoo" 不是一个类

创建一个 IFoo 类型的变量会编译,它的OnReadVar事件会触发,但是我应该在那里返回value什么?

我想我可以为每个接口定义一个类,然后创建这些类的实例,但这似乎有点迂回,因为我不需要类本身,我只想通过接口类型向脚本公开信息......所以有没有办法将“接口实例”数组返回给脚本?

更新

所以,我已经想出了如何将一个数组从 Delphi 端返回到脚本端,现在我需要找到一种方法来创建“接口实例”以放入结果数组......到目前为止我所拥有的:

TdwsUnit我的后代中创建了一个函数(实际上是一个方法,但我想这无关紧要)

meth := typClass.Methods.Add;
meth.Name := 'GetData';
meth.ResultType := 'array of String';
meth.OnEval := H_EvalFnc_GetData;

然后在OnEval

procedure TMyUnit.H_EvalFnc_GetData(Info: TProgramInfo; ExtObject: TObject);
begin
  Info.ResultVars.Member['Length'].Value := 2;
  Info.ResultVars.Element([0]).Value := 'Hello';
  Info.ResultVars.Element([1]).Value := 'Word';
end;

现在我需要将结果类型更改为array of IFoo并弄清楚如何在OnEvalhadler 中创建数组元素......欢迎任何关于如何做到这一点的提示。

4

0 回答 0