2012-09-10 30 views
13

我正在寻找一个好的Delphi免费脚本引擎。我想将脚本添加到应用程序中,以便我可以编写小型测试脚本。具体来说,我需要:Delphi有没有一种很好的脚本Pascal语言?

  • 类Pascal语法
  • 电流(我看着的RemObjects帕斯卡尔脚本,但它根据一个帖子我看到是“过时”)。

我不需要全面的语言支持,只是基本知识。我看到这个:https://stackoverflow.com/questions/226135/scripting-library-for-delphi,但我假设事情从那时起就有所改变。

我想要做的就是将备忘录组件添加到我的程序中,并在运行时向备忘录添加源片段并单击go按钮。我希望脚本能够访问我的应用程序的变量和函数。

完成此操作的最简单途径是什么?示例程序如下。

program Project31; 

uses 
    Forms, 
    Unit36 in 'Unit36.pas' {Form36}; 

{$R *.res} 

begin 
    Application.Initialize; 
    Application.CreateForm(TForm36, Form36); 
    Application.Run; 
end. 

unit Unit36; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, StdCtrls; 

type 
    TForm36 = class(TForm) 
    Button1: TButton; 
    Memo1: TMemo; 
    procedure Button1Click(Sender: TObject); 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form36: TForm36; 

implementation 

{$R *.dfm} 

procedure RoutineInMyApplication ; 

begin 
ShowMessage ('Hello from my Application') ; 
end ; 

procedure TForm36.Button1Click(Sender: TObject); 
begin 
//ExecuteScript (Memo1.Lines) ; 
end ; 

end. 

object Form36: TForm36 
    Left = 0 
    Top = 0 
    Caption = 'Form36' 
    ClientHeight = 174 
    ClientWidth = 391 
    Color = clBtnFace 
    Font.Charset = DEFAULT_CHARSET 
    Font.Color = clWindowText 
    Font.Height = -11 
    Font.Name = 'Tahoma' 
    Font.Style = [] 
    OldCreateOrder = False 
    PixelsPerInch = 96 
    TextHeight = 13 
    object Button1: TButton 
    Left = 300 
    Top = 72 
    Width = 75 
    Height = 25 
    Caption = 'Button1' 
    TabOrder = 0 
    OnClick = Button1Click 
    end 
    object Memo1: TMemo 
    Left = 8 
    Top = 21 
    Width = 241 
    Height = 145 
    Lines.Strings = (
     'begin' 
     'ShowMessage ('#39'Hello world'#39') ;' 
     'CallSomehow (RoutineInMyApplication) ;' 
     'end.' 
     ' ') 
    TabOrder = 1 
    end 
end 
+1

我个人更喜欢PascalScript。缺少对64位Delphi编译器的缺失支持可能是缺点,但是当您使用32位Delphi编译器(支持目前支持Delphi XE2)时,那么您会没事的,我想。 PascalScript目前在纠正错误方面的优先级较低(主要针对64位编译器的问题),但这并不意味着它对32位不稳定。像InnoSetup这样的项目使用它,它仍然活着。经过一个非常快速的搜索,我不认为有相同的校样质量的免费替代品。 – TLama

+0

谢谢@TLama。我已经安装了它的D2006和XE1,但它没有安装任何D10 BPL,ReadMe.html是一个死链接,最后一项changes.txt文件是“对Borland Developer Studio 2006的全新支持”,所以我不是'自信。我会再看看。如果您有时间和已安装的软件,我会很乐意看到如何让示例应用程序运行。 – rossmcm

+2

我不会认真对待['changelog.txt'](https://github.com/remobjects/pascalscript/blob/master/Source/changelog.txt)文件。自上次登录该文件以来,['许多提交'](https://github.com/remobjects/pascalscript/commits/master),所以我会说他们只是停止登录到该文件。 – TLama

回答

14

尝试目前由Eric Grange保持dwscript库。

+0

谢谢@RRUZ。有关它如何与PascalScript进行比较的任何评论? – rossmcm

+1

1. dwscript支持Delphi语法,并且为语言添加了很好的扩展2.是[积极维护](http://code.google.com/p/dwscript/source/list)3.)好的[文档和样本](http://code.google.com/p/dwscript/w/list)4.有一个广泛的单元测试集。 – RRUZ

+0

我发现这个:http://stackoverflow.com/questions/4889810/what-are-the-pros-and-cons-of-remobjects-pascalscript-versus-the-dws-script这非常有帮助。我一定会试一试。 – rossmcm

4

Jedi JVCL还包含TJvInterpreter,它是一个非常轻量级的(小)解释器,但功能比dwscript更有限。

对于非常小的(用户输入的公式,或者简单的字符串和数字处理任务)JvInterpreter对我来说工作得很好。

+0

是否可以在应用程序中调用例程和访问变量? – rossmcm

+0

你必须写一点代码,但是,你可以。由于RTTI和方法调用现在可以更智能化地完成,所以在更新版本的delphi中,代码少得多。但是你想要调用的单元需要一些代码。我其实喜欢有一个包装控件什么是可访问的。使我的脚本更难以崩溃我的应用程序。 –

+0

谢谢@Warren。我尝试了一个“Hello World”应用程序,并且留下了深刻的印象 - 即使包括类似Delphi的编辑器也很容易。这里有一些文档[这里](http://jvcl.delphi-jedi.org/JvInterpreter.htm),但是在其他方向进行示例 - 即从脚本访问应用程序变量的方式上很少见。有没有_real_ JVCL的帮助? http://wiki.delphi-jedi.org/wiki/JEDI_Visual_Component_Library中的大部分内容似乎都是空的,并且[JvInterpreter](http://jvcl.delphi-jedi.org/JvInterpreter.htm)是一个受欢迎的例外。 – rossmcm

0

来自FastReport的FastScript(堆栈不允许提供链接)。包括PascalScript,C++脚本,JScript和BasicScript。 PascalScript似乎正是你所要求的。

+1

问题指定空闲。 FastReport是商业的。虽然很好。 –

+0

@WarrenP哦,对不起,你是对的。我想念“自由”一词。 – Badiboy

0

尝试嵌入Lua。例如见Lua 5.1 for Delphi

+0

Lua有一个'end'关键字和一个'function'关键字,但它不像pascal那样。 –

相关问题