首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从DWScript调用类的过程

从DWScript调用类的过程
EN

Stack Overflow用户
提问于 2013-10-04 16:28:56
回答 2查看 663关注 0票数 3

如何从以主形式创建的类调用过程。它能像这个伪代码显示的那样做吗?

代码语言:javascript
复制
type
  TDemo = class
    procedure test;
    constructor Create;
    destructor Destroy; override;
  end;

var
  Form28: TForm28;
  Demo:TDemo;

implementation

{$R *.dfm}

procedure TForm28.Button1Click(Sender: TObject);
var
   prog : IdwsProgram;
   exec : IdwsProgramExecution;
begin
   Demo := TDemo.Create;
   prog := DelphiWebScript1.Compile('Demo.Test;');
   exec := prog.Execute;
end;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-04 17:20:02

要做到这一点,首先必须将本机类公开给脚本引擎。查看一下TdwsUnit组件。它声明了一个与外部代码接口的脚本单元。您可以在表单上删除一个,定义类,定义其方法,并在调用外部例程的OnEval事件上挂起事件处理程序。

票数 1
EN

Stack Overflow用户

发布于 2013-10-05 19:00:10

有一个有限的RTTI曝光器和RTTI连接器,允许通过RTTI访问Delphi类。

然而,这些RTTI工具并没有得到太多的探索,因为大多数Delphi类对于脚本的使用并不“安全”。我的意思是很容易崩溃主机或泄漏内存,因此“原始”Delphi类通常不适合于最终用户脚本(即。最终用户将无权错误,您将无法提供稳定的调试,等等)。

手动公开和增强TdwsUnit事件处理程序中公开类的的另一种方法是将类公开为OLE自动化对象,然后可以使用DWScript COM连接器访问它们。这样做的好处是,要公开自动化对象,通常必须对内存泄漏和悬空指针进行最少的增强,并且您的自动化类可以从其他支持COM的环境中访问。

作为RTTI出错的一个例子,考虑一个像TComponent或TCollection这样的完全自动管理的VCL类,如果您只有原始的RTTI暴露,而不是执行以下操作的脚本:

代码语言:javascript
复制
item := myCollection.Add;
myCollection.Clear;
item.Caption := 'hello bug';

将导致主机应用程序中的随机内存覆盖,而没有任何安全的方法通知脚本用户潜在的错误。

即将推出的Delphi编译器可能会为某些类提供一种减轻内存覆盖的方法(但并不是全部,原因是TComponent和其他类当前实现/绕过ARC的方式)。此外,Delphi编译器目前不受支持(由于各种原因,最突出的原因是我目前无法访问它们)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19186291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档