6

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

dwsUnit.ExposeRTTI( TDemo.ClassInfo  )

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

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

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

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

4

1 回答 1

4

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

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

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

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

于 2011-08-26T06:15:29.977 回答