应该如何将接口实现“注入”到脚本中?假设我在 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
并弄清楚如何在OnEval
hadler 中创建数组元素......欢迎任何关于如何做到这一点的提示。