在RemObjects Pascal脚本(Delphi)中加载预编译的脚本
我试图在运行时在Delphi中加载预编译的RemObjects Pascal脚本.
但是,当我尝试加载Delphi时,除了’无法导入VALUE_TEAMCODE’. Value_TeamCode是我已经在Pascal脚本中注册的Delphi应用程序中的一个函数. 这就是我在做的事情.下面粗略的伪代码 – 实际代码分为多个文件.此外,当需要运行脚本时,下面的SetCompiled调用会在应用程序中发生. 关于代码的说明: ... //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脚本帮助. 再说一遍.我已经在运行时编译和执行脚本而没有任何问题.出于性能原因,我需要预编译. 任何帮助赞赏. 更新: 目前的解决方法是在我的系统中为每个脚本配备一个脚本引擎.然后,这些引擎在预编译后保留在内存中.这将删除每个脚本编译开销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倍左右. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |