4

如何从 delphi 调用以类为参数的 DWScript 过程?

前任:

DWScript 方面:

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

德尔福方面:

var
  Obj: TObject;


Exec.Invoke('Proc1', [obj]);
4

1 回答 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 获得某种形式的自动内存管理时,这将变得更简单)。

于 2012-06-04T06:16:53.580 回答