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

6

我正在使用优秀的Pascal DWScript构建内置脚本功能。同时,我还通过以下方式将我的Delphi类定义(TDemo)添加到DWScript中:

dwsUnit.ExposeRTTI( TDemo.ClassInfo  )

这很好用,是快速添加属性和方法的绝佳方式。

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

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

这个例程看起来很有前途,但我从一个未初始化的单位表中得到了AV。我还查看了SVN源代码的单元测试代码,但没有找到使用此函数的方法。有人能指导我应该添加/更改什么吗?


也许可以在该单元的“初始化”部分添加一些代码? - Johan
1个回答

4

需要使用ExposeInstanceToUnit功能时,必须在TdwsUnit表初始化内部使用,可以查阅RTTIExposeTests/ExposeInstancesAfterInitTable示例代码。它允许直接公开动态实例。

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

还要记住,您必须确保公开的实例即使脚本行为不当也能正常运行,例如当用户尝试手动销毁您公开的实例时,而该实例不应被销毁。默认情况下,ExposeRTTI会映射析构函数,因此您可能需要通过指定eoNoFreeOnCleanup来限制析构函数。

编辑:最近添加的最后一种方法是使用TdwsRttiConnector,它基本上允许公开和连接到通过RTTI可达的任何内容。从设置代码的角度来看,这非常轻巧,但缺点是您无法获得任何形式的编译时检查。


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