【问题标题】:Invoke a dwscript procedure with a class as param from delphi调用一个 dwscript 过程,其中一个类作为来自 delphi 的参数
【发布时间】:2012-06-01 14:37:46
【问题描述】:

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

例如:

DWScript 方面:

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

德尔福方面:

var
  Obj: TObject;


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

【问题讨论】:

    标签: delphi dwscript


    【解决方案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 获得某种形式的自动内存管理时,这将变得更简单)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多