问题标签 [dwscript]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
161 浏览

delphi - 隐式使用 TdwsUnit

将 TDelphiWebScript 对象分配给 TdwsUnit 的 Script 属性是否足以隐式使用它?(无需将其添加到脚本中的用途)

0 投票
1 回答
162 浏览

delphi - DWScript 基类型效率

DWScript 中数量有限的基本类型非常方便,但不会增加很多开销。考虑到整数是 Int64,例如,当您使用字节值时,这应该是相当多的开销。DWScript 是否在内部对此进行了优化?如果没有,有没有办法使用语言扩展来添加其他基本类型,例如Byte

如果这会导致类型推断出现问题,如果可以在语言扩展中处理这个问题,那么整数值的推断可以推迟到主Integer类型或由扩展处理以选择最小的拟合数据类型。

0 投票
0 回答
172 浏览

delphi - 在 DWScript 中从 Delphi 调用重载方法

dwsDatabaseLibModule.pas引擎中包含的单元中,通过 TProgramInfo.Vars[] 访问类来调用类的构造函数。类似地,我想我可以以同样的方式调用重载方法:info.Vars['TMyClass'].Method['MethodName'].Call.

在那里使用 IInfo.Method 属性,我如何区分重载的方法?

0 投票
2 回答
753 浏览

delphi - 使用 dwscript 作为 Delphi Application 的插件框架

有没有办法使用 dwscript 作为 Delphi 应用程序的插件框架?例如,我在 dwscript 中有一个添加数字的简单方法,这需要从托管应用程序中调用。

一种解决方案是将 dwscript 保留为文本文件并在运行时加载文本文件并从主机调用该方法。有没有办法创建一个包含 dwscript 的 dll 并在运行时加载 dll 然后调用该方法?

0 投票
0 回答
496 浏览

delphi - 如何加载/卸载 DLL 并在 Delphi DWScript 执行的脚本中使用其方法

嗨,我的问题是关于脚本内的 DLL 加载/绑定,因为我想创建一个脚本接口,其中可能有基于 Delphi DWScript 的插件。其中一些插件可以让 DLL 使用其中包含的函数。DWScript 是否准备好加载在脚本中调用的 DLL?

我在想它是否已经实现了LoadLibraryGetProcAddress(动态加载)或使用lib <dllname> [alias <aliasname>]方法声明中的语句静态绑定方法。

其他一些脚本机制已经管理此功能,例如 TMS Scripter、paxScript、paxCompiler。

0 投票
1 回答
241 浏览

delphi - 在 DWScript 中的 OnFastEval 事件中获取结果数据上下文

如何在 TDWSUnit 函数的 OnFastEval 事件中获取结果值的 IDataContext?

通过 OnFastEval 事件呈现的“神奇功能”功能无法返回复杂数据,例如记录,因为 OnFastEval 返回 Variant。内部魔术函数支持使用 IDataContext 接口返回复杂数据。

0 投票
1 回答
851 浏览

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

TdwsUnit.ExposeRTTI我使用方法向脚本公开了一个 Delphi 类。它适用于基本数据类型。

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

看起来脚本编译器明白我想调用事件处理程序而不是分配OnChange属性。添加"@"标志没有帮助。

我的 Delphi 对象如何让事件处理程序在脚本中包含其处理程序代码?

问候。

0 投票
1 回答
162 浏览

delphi - 如何找到调用 TdwsGlobal.onReadVar/OnWriteVar 事件的变量

我在 DWSUnit 中动态创建变量,如下所示:

所有变量都指向同一个事件过程。

问题是我不知道如何确定哪个变量触发了事件。

该事件只给了我一个 TprogramInfo 结构,但我在其中找不到任何东西来识别实际变量。

如果我在设计时创建了变量,我可以为每个变量设置一个单独的事件,但是当动态创建变量时这是不可能的。

我在这里错过了什么吗?

我才刚刚开始使用 DWS 并且已经得到了我需要的大部分工作,但我被困在这里!

0 投票
0 回答
246 浏览

delphi - 将接口实现注入脚本

应该如何将接口实现“注入”到脚本中?假设我在 TdwsUnit 中定义了一个接口类型,比如

现在我该如何实现一个array of IFoo在脚本中返回(或 IFoo 列表甚至单个 IFoo )的函数?

我尝试将一个 IFoo 项目添加到Instances该单元的集合中,但这导致了错误:

语法错误:TdwsUnit: "uTest" -- TdwsInstance: "tmp" -- AutoInstantiate 为真,但 DataType "IFoo" 不是一个类

创建一个 IFoo 类型的变量会编译,它的OnReadVar事件会触发,但是我应该在那里返回value什么?

我想我可以为每个接口定义一个类,然后创建这些类的实例,但这似乎有点迂回,因为我不需要类本身,我只想通过接口类型向脚本公开信息......所以有没有办法将“接口实例”数组返回给脚本?

更新

所以,我已经想出了如何将一个数组从 Delphi 端返回到脚本端,现在我需要找到一种方法来创建“接口实例”以放入结果数组......到目前为止我所拥有的:

TdwsUnit我的后代中创建了一个函数(实际上是一个方法,但我想这无关紧要)

然后在OnEval

现在我需要将结果类型更改为array of IFoo并弄清楚如何在OnEvalhadler 中创建数组元素......欢迎任何关于如何做到这一点的提示。

0 投票
1 回答
123 浏览

delphi - dwsscript 操作数无效

在使用 RTTIVariable 类型编译我的 dws 脚本时,我收到一个编译错误“无效的操作数”。以下是否可以工作?

声明变量是一种形式。

该脚本不会在此行上编译。似乎它只想要一个字符串。

所有帮助表示赞赏