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

我试图在运行时在Delphi中加载预编译的RemObjects Pascal脚本.
但是,当我尝试加载Delphi时,除了’无法导入VALUE_TEAMCODE’. Value_TeamCode是我已经在Pascal脚本中注册的Delphi应用程序中的一个函数.

这就是我在做的事情.下面粗略的伪代码 – 实际代码分为多个文件.此外,当需要运行脚本时,下面的SetCompiled调用会在应用程序中发生.

关于代码的说明:
FPascalScript是一个TPSScriptDebugger

...

//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上搜索了各种主题,但似乎没有与此问题相关.

再说一遍.我已经在运行时编译和执行脚本而没有任何问题.出于性能原因,我需要预编译.

任何帮助赞赏.

更新:

目前的解决方法是在我的系统中为每个脚本配备一个脚本引擎.然后,这些引擎在预编译后保留在内存中.这将删除每个脚本编译开销30ms,否则.它也使用了更多的内存但不足以成为一个问题.

我仍然宁愿只使用一个脚本引擎.(因此需要加载预编译的脚本)

解决方法

感谢RemObject Connect beta论坛上的回复,我有一个解决方案.
(帖子见 http://connect.remobjects.com/discussion/comment/13540#Comment_13540)

谢谢你去海报vovanl.

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

...

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倍左右.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...