【问题标题】:How best to expose a class instance in DWScript如何最好地在 DWScript 中公开一个类实例
【发布时间】:2011-08-25 09:05:40
【问题描述】:

我正在使用出色的 Pascal DWScript 组合一个内置脚本功能。我还使用以下方法将我自己的 Delphi 端类定义 (TDemo) 添加到 DWScript:

dwsUnit.ExposeRTTI( TDemo.ClassInfo  )

这很有效,是快速添加属性和方法的好方法。

我也希望以类似的方式添加现有实例,因此我创建了类型为 TDemo 的实例 FDemo,然后执行:

   dwsUnit.ExposeInstanceToUnit( 'Demo', 'TDemo', FDemo );

这看起来是一个很有希望的例程调用,但我从一个未初始化的单元表中得到一个 AV。我还查看了 SVN 源的单元测试代码以查看此功能的使用,但无济于事。谁能指出我应该添加/更改什么?

【问题讨论】:

  • 也许在该单元的initialization 部分添加一些代码?

标签: delphi rtti dwscript


【解决方案1】:

ExposeInstanceToUnit 必须在 TdwsUnit 表初始化中使用,有关一些示例代码,请参阅 RTTIExposeTests/ExposeInstancesAfterInitTable。它允许直接公开动态实例。

另一种方法是使用 TdwsUnit 组件的 Instances 集合,您可以获得设计时支持,以及对实例及其生命周期的更多控制。

另外请记住,即使脚本行为不端,您也必须确保您公开的实例能够正常运行,f.i.当用户尝试手动销毁您公开的实例时,该实例不应被销毁。默认情况下,ExposeRTTI 将映射析构函数,因此您可能希望通过指定 eoNoFreeOnCleanup 来限制它。

编辑:最近添加的最后一种方法是使用 TdwsRttiConnector,它基本上允许公开和连接到通过 RTTI 可访问的任何内容。就设置的代码而言,这非常轻量级,但缺点是您没有得到任何形式的编译时检查。

【讨论】:

  • 谢谢 Eric,这很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
  • 1970-01-01
  • 2014-11-24
  • 2011-06-26
  • 2019-12-05
  • 1970-01-01
相关资源
最近更新 更多