首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在RemObjects Pascal脚本(Delphi)中加载预编译脚本

在RemObjects Pascal脚本(Delphi)中加载预编译脚本
EN

Stack Overflow用户
提问于 2013-06-14 05:16:09
回答 2查看 1.4K关注 0票数 8

我试图在运行时在Delphi中加载一个预编写的RemObjects Pascal脚本。然而,当我尝试加载它时,Delphi例外地使用‘不能导入VALUE_TEAMCODE’。Value_TeamCode是我的Delphi应用程序中的一个函数,我已经在Pascal脚本中注册了它。

这就是我在做的事情。下面的粗伪代码-实际代码被分割成多个文件。另外,当需要运行脚本时,下面的SetCompiled调用将在应用程序中发生。

关于代码的注意:FPascalScript是一个TPSScriptDebugger

代码语言:javascript
复制
...

//Register custom functions with Pascal Script
FuncsRegister;  

//Load script
FPascalScript.Script.AddStrings(AContent);

//Compile script
FPascalScript.Compile;

//Get compiled script
FPascalScript.GetCompiled(sCompiledScript)

//Try and set script back in - ERROR Here 'Cannot Import VALUE_TEAMCODE'
FPascalScript.PascalScript.Debugger.SetCompiled(sCompiledScript);

...

也许我做错了。我不确定是否可以加载预编译脚本。

我在RemObjects WebSite Wiki上搜索,但是Pascal脚本帮助被删除了。我还在StackOverflow上搜索了各种主题,但似乎都与这个问题无关。

只是另一个音符。我已经在运行时编译和执行脚本,没有问题。出于性能原因,我需要预编译。

任何帮助都很感激。

更新:

当前的工作是在我的系统中每个脚本都有一个脚本引擎。然后这些引擎在预编译后留在内存中.这将消除我在其他情况下的每个脚本编译开销30 per。它还使用了更多的内存,但不足以引起关注。

不过,我还是宁愿只使用一个脚本引擎(因此需要加载预编译脚本)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-18 02:13:41

感谢RemObject连接测试版论坛上的回应,我有一个解决方案。(发帖见13540)

谢谢你的海报。

我必须通过OnExecImport事件导入我的函数,如下所示:

代码语言:javascript
复制
...

FPascalScript.OnExecImport := OnExecImport;
FPascalScript.SetCompiled(sCompiledScript);

...

TMyClass.OnExecImport(Sender: TObject; se: TPSExec; x: TPSRuntimeClassImporter);
begin
  se.RegisterDelphiFunction(@Value_TeamCode, 'Value_TeamCode', cdRegister);
end;

...

SetCompiled似乎清除了所有现有的注册,因此您必须将OnExecImport挂钩以重新注册函数、过程、方法等。

请注意,加载预编译脚本(即将一个脚本改为另一个脚本)似乎会增加一些额外的时间开销。我发现我最初的工作速度实际上快了6倍。

票数 1
EN

Stack Overflow用户

发布于 2013-06-14 07:33:04

我要反驳的不是这是怎么回事,而是为什么?

编译后的脚本很可能是版本绑定的,甚至可能是平台/目标绑定--它们的编译速度通常足够快,以至于您永远不会注意到时间的命中。您是否真的对脚本的使用非常深入,以致于编译时间是一个问题?

有时候最好的答案是“你真的需要这么做吗?”

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

https://stackoverflow.com/questions/17101532

复制
相关文章

相似问题

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