如何最好地在DWScript中公开类实例

时间:2011-08-25 09:05:40

标签: delphi rtti dwscript

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

dwsUnit.ExposeRTTI( TDemo.ClassInfo  )

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

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

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

这看起来很有前途,但我从未初始化的单位表中获得了AV。我也查看了SVN源的单元测试代码,看看这个功能的使用但无济于事。任何人都可以指出我应该添加/更改的内容吗?

1 个答案:

答案 0 :(得分:4)

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

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

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

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

相关问题