我使用TdwsUnit.ExposeRTTI方法将Delphi类暴露给脚本.它适用于基本数据类型.
但是当我添加一个时,它不起作用TNotifyEvent.我的Delphi类有一个OnChange : TNotifyEvent属性,当OnChage在脚本中分配它时,我收到一个错误
"Syntax Error: More arguments expected!"
Run Code Online (Sandbox Code Playgroud)
看起来脚本编译器理解我想调用事件处理程序而不是分配OnChange属性.添加"@"标志无济于事.
我的Delphi对象怎么能有一个事件处理程序在脚本中有他的处理程序代码?
问候.
我打算在我的应用程序中包含一个pascal脚本.它不需要任何Web访问,只需访问我的应用程序中的类.应该快速(编译).我看到有许多脚本可用,有些是解释器,但在编译器中RemObjects pascal脚本和Delphi Web脚本(DWS)似乎是强大的并且积极地追求.
请问有人可以提出一个优点吗?谢谢
我正在处理的应用程序允许将脚本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) 我想知道DWScript是否能够在脚本中使用线程,因为一些引擎不会同步访问它的内部数据结构.
据我了解,DWScript不会将脚本编译为中间字节码.
但是,我希望能够存储"已编译 "的脚本,以便能够通过流发送它或将其保存到文件中.
我想知道:有没有办法序列化一个TdwsProgram对象?
我无法在任何地方找到任何答案.我查看了代码并且似乎不可能,但我认为无论如何我应该问这个问题......
嘿,Delphi Web Script是非常棒的脚本引擎.我正试图在我的一个项目中使用它.但是,我不确定是否可以枚举脚本引擎中可用的所有类型,函数,例如,我想要一个列表,其中包含我在脚本编写时可以使用的所有方法(这包括所有内部和外部类型,功能,程序等).快速脚本具有树视图组件,它公开了您可以使用的所有类型.我在dwscript中寻找类似的东西.提前致谢.
给出一个IScriptObj参考如何获得相应的IInfo或TProgramInfo?
我有一个包装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) 使用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.
我正在使用优秀的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源的单元测试代码,看看这个功能的使用但无济于事.任何人都可以指出我应该添加/更改的内容吗?
我正在为DWScript编写IDE,并使用调试器逐步完成代码.我现在希望添加一个'局部变量'的显示(即范围内的变量).有人能指点我这样做的方法吗?我可以获得所有符号的列表,但不了解如何获得当前范围的一部分.谢谢.