标签: dwscript

DWScript:在公开的Delphi类中使用事件

我使用TdwsUnit.ExposeRTTI方法将Delphi类暴露给脚本.它适用于基本数据类型.

但是当我添加一个时,它不起作用TNotifyEvent.我的Delphi类有一个OnChange : TNotifyEvent属性,当OnChage在脚本中分配它时,我收到一个错误

"Syntax Error: More arguments expected!"
Run Code Online (Sandbox Code Playgroud)

看起来脚本编译器理解我想调用事件处理程序而不是分配OnChange属性.添加"@"标志无济于事.

我的Delphi对象怎么能有一个事件处理程序在脚本中有他的处理程序代码?

问候.

delphi dwscript

18
推荐指数
1
解决办法
675
查看次数

RemObjects PascalScript与DWS脚本的优缺点是什么?

我打算在我的应用程序中包含一个pascal脚本.它不需要任何Web访问,只需访问我的应用程序中的类.应该快速(编译).我看到有许多脚本可用,有些是解释器,但在编译器中RemObjects pascal脚本Delphi Web脚本(DWS)似乎是强大的并且积极地追求.

请问有人可以提出一个优点吗?谢谢

delphi compiler-construction pascal dwscript

17
推荐指数
3
解决办法
3464
查看次数

有两种方法在执行DWScript时保留变量值吗?

我正在处理的应用程序允许将脚本sinppets嵌入到文档中.例如:

SomeText
<* PrintLn("This line is generated by a script"); *>
Some other text
<* PrintLn("This line is generated by a script, too"); *>
Some more lines
Run Code Online (Sandbox Code Playgroud)

结果

SomeText
This line is generated by a script
Some other text
This line is generated by a script, too
Some more lines
Run Code Online (Sandbox Code Playgroud)

我正在使用DWScript.在内部编译和执行第一个脚本片段.比下一个是RecompiledInContext并执行等等.在片段中声明的函数/变量/ etc在所有后续片段中都可用.但是,片段之间的变量值会丢失.例如:

SomeText
<* var x: Integer = 5; *>
Some other text
<* PrintLn(x); *>
Some more lines
Run Code Online (Sandbox Code Playgroud)

生成文档后:

SomeText
Some other text
0  <-- I would like this …
Run Code Online (Sandbox Code Playgroud)

delphi dwscript

9
推荐指数
2
解决办法
439
查看次数

DWScript是线程安全的吗?

我想知道DWScript是否能够在脚本中使用线程,因为一些引擎不会同步访问它的内部数据结构.

delphi thread-safety dwscript

8
推荐指数
1
解决办法
628
查看次数

序列化Tdws程序

据我了解,DWScript不会将脚本编译为中间字节码.
但是,我希望能够存储"已编译 "的脚本,以便能够通过流发送它或将其保存到文件中.

我想知道:有没有办法序列化一个TdwsProgram对象?

我无法在任何地方找到任何答案.我查看了代码并且似乎不可能,但我认为无论如何我应该问这个问题......

delphi dwscript

8
推荐指数
1
解决办法
264
查看次数

dwscript - 如何枚举所有可用的类型?

嘿,Delphi Web Script是非常棒的脚本引擎.我正试图在我的一个项目中使用它.但是,我不确定是否可以枚举脚本引擎中可用的所有类型,函数,例如,我想要一个列表,其中包含我在脚本编写时可以使用的所有方法(这包括所有内部和外部类型,功能,程序等).快速脚本具有树视图组件,它公开了您可以使用的所有类型.我在dwscript中寻找类似的东西.提前致谢.

delphi dwscript

7
推荐指数
1
解决办法
392
查看次数

DWScript:从IScriptObj到IInfo或TProgramInfo

给出一个IScriptObj参考如何获得相应的IInfoTProgramInfo


我有一个包装Delphi对象的脚本对象.

为了管理脚本对象的生命周期,Delphi对象存储对脚本对象的引用.Script对象是使用TdwsUnit组件声明的.这是非常标准的,如下所示:

德尔福

type
  TDelphiObject = class
  private
    FScriptObject: IScriptObj;
  public
    procedure DoSomething;
    property ScriptObject: IScriptObj read FScriptObject write FScriptObject;
  end;
Run Code Online (Sandbox Code Playgroud)

脚本

type
  TScriptObject = class
  protected
    procedure DoSomething; virtual;
  public
    constructor Create;
  end;
Run Code Online (Sandbox Code Playgroud)

Delphi对象的实例化和Delphi /脚本链接的设置发生在脚本对象构造函数的Delphi实现中.也非常标准:

德尔福

// Implements TScriptObject.Create
procedure TMyForm.dwsUnitClassesTScriptObjectConstructorsCreateEval(Info: TProgramInfo; var ExtObject: TObject);
var
  DelphiObject: TDelphiObject;
  DelphiObjectInfo: IInfo;
begin
  // Create the Delphi-side object
  DelphiObject := TDelphiObject.Create;

  // Get the script object "self" value
  DelphiObjectInfo := Info.Vars['self'];

  // …
Run Code Online (Sandbox Code Playgroud)

delphi dwscript

7
推荐指数
1
解决办法
407
查看次数

如何检查DWScript FileCreate函数的返回值?

使用DWScript,我没有看到检查FileCreate函数返回值的明显方法.

示例(不工作)脚本:

function TestFileCreate : Boolean;
var
    F : File;
begin
    F := FileCreate('MyTestFile.txt');
    Result := (F = -1);        // Not working!
    Result := (F.Handle = -1); // Not working!
end;
Run Code Online (Sandbox Code Playgroud)

从DWScript源代码中提取:

procedure TFileCreateFunc.DoEvalAsVariant(const args : TExprBaseListExec; var result : Variant);
var
   h : THandle;
   i : IdwsFileHandle;
begin
   h:=FileCreate(args.AsFileName[0]);
   i:=TdwsFileHandle.Create(h);
   Result:=IUnknown(i);
end;
Run Code Online (Sandbox Code Playgroud)

如您所见,在内部调用Delphi CreateFile,失败时结果值为-1.此数值将转换为IdwsFileHandle.

delphi dwscript

7
推荐指数
1
解决办法
254
查看次数

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

我正在使用优秀的Pascal DWScript整合内置脚本功能.我还使用以下命令将自己的Delphi端类定义(TDemo)添加到DWScript:

dwsUnit.ExposeRTTI( TDemo.ClassInfo  )
Run Code Online (Sandbox Code Playgroud)

这只是工作,是快速添加属性和方法的好方法.

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

   dwsUnit.ExposeInstanceToUnit( 'Demo', 'TDemo', FDemo );
Run Code Online (Sandbox Code Playgroud)

这看起来很有前途,但是我从未初始化的单位表中得到一个AV.我也查看了SVN源的单元测试代码,看看这个功能的使用但无济于事.任何人都可以指出我应该添加/更改的内容吗?

delphi rtti dwscript

6
推荐指数
1
解决办法
816
查看次数

如何使用DWScript及其调试器创建"局部变量"显示

我正在为DWScript编写IDE,并使用调试器逐步完成代码.我现在希望添加一个'局部变量'的显示(即范围内的变量).有人能指点我这样做的方法吗?我可以获得所有符号的列表,但不了解如何获得当前范围的一部分.谢谢.

ide delphi variables debugging dwscript

6
推荐指数
1
解决办法
420
查看次数