从Delphi调用一个带有类参数的dwscript过程

4

我该如何在Delphi中调用一个接受类作为参数的DWScript过程?

例如:

DWScript端:

procedure Proc1(AParam: TObject);
begin
  // do something useful
end;

Delphi方面:

var
  Obj: TObject;


Exec.Invoke('Proc1', [obj]);
1个回答

1
你需要将Delphi端的对象包装成脚本端的对象,并在需要时创建一个。
为了暴露,你可以使用TdwsUnit并手动暴露(这可以防止脚本误操作导致的Delphi端类问题),或者使用RTTI暴露(但在这种情况下,脚本端的错误将直接影响Delphi,从而可能导致主机崩溃,因此只有在你知道你的类已经安全,或者你不关心沙盒时才使用RTTI)。
如果你只需要简单的暴露,更简单的方法是使用RTTI环境(参见URTTIExposeTests中的TRTTIExposeTests.EnvironmentTest),但请记住上述关于RTTI和安全/沙盒的注意事项。
更复杂的方法是创建一个脚本端对象,代码如下:
scriptObj := Info.Vars['TScriptSideClassName'].Method['Create'].Call([param1, param2]);
然后手动调整其ExternalObject属性。
您可能还需要担心只创建一次脚本端对象(如果您希望脚本端对象比较正常工作),以及清理(即,如果Delphi端对象在脚本仍在运行时被释放会发生什么,或者当脚本端对象被释放时谁应该负责释放Delphi端对象),以及其他微妙之处(如果Delphi获得某种形式的自动内存管理,这将变得更简单)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接