作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用出色的 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/
我是一名优秀的程序员,十分优秀!