gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:01:30 26 4
gpt4 key购买 nike

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

dwsUnit.ExposeRTTI( TDemo.ClassInfo  )

这确实有效,并且是快速添加属性和方法的好方法。

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

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

这看起来是一个很有前途的调用例程,但我从未初始化的单元表中获取了 AV。我也查看了SVN源码的单元测试代码来查看这个函数的使用,但没有结果。谁能指出我应该添加/更改什么?

最佳答案

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

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

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

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

关于delphi - 如何最好地在 DWScript 中公开类实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7187718/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com