代码之家  ›  专栏  ›  技术社区  ›  Chris Smith

运行$COMPILE目标代码而不首先将其保存到全局

  •  0
  • Chris Smith  · 技术社区  · 6 年前

    Cach提供 $COMPILE 函数将源代码字符串数组转换为目标代码。这个 object 参数允许您将二进制对象数据保存到本地数组变量中,而不影响任何全局数组。

    文档说明可以在 ^rOBJ(routine) 对于在 对象 参数,它将更改运行的程序 routine .

    我的问题是,我能运行 对象 直接数组而不修改任何全局参数(例如,将行保存在 ^rOBJ 首先?我的代码字符串是由外部应用程序动态生成的,不能预先加载到例程中。

    我想限制呼叫程序对整个系统的访问。有权修改 ^罗布 意味着能够更改控制系统的应用程序例程。这也意味着我必须维护一堆临时例程,确保它们在外部进程中得到清理,即使作业意外终止。

    目前,我正在使用 XECUTE 直接运行代码行,但我宁愿使用编译后的代码,因为它更快。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Chris Smith    6 年前

    我找不到逃跑的方法 $COMPILE 直接编码。不过,我确实找到了解决办法:

    XECUTE 你可以 ZLOAD 一个常见的空模板例程,然后 ZINSERT 要编译的代码 ZSAVE 所以这些变化对当前的进程是保密的。这样就有可能 DO 你刚才插入并运行上传的代码的本地“例程缓冲区”版本的例程(显然是编译的和所有的东西)。

    从我的测试中,我发现如果我从 可爱的 , $ZNAME 恢复到调用例程,并在中上载更改 锌矿 已还原。因此,重要的是 Z负载 , 锌矿 一模一样 可爱的 行。