第十六章 调用Callout Library函数

2024-01-05  本文已影响0人  Cache技术分享

第十六章 调用Callout Library函数

Callout 库是一个共享库(DLLSO 文件),其中包含 $ZF Callout 接口的挂钩,允许各种 ZF 函数在运行时加载它并调用其函数。 `ZF Callout接口提供了四种不同的接口,可用于在运行时加载Callout` 库并从该库调用函数。这些接口的主要区别在于如何识别库并将其加载到内存中:

使用 $ZF() 访问 iriszf 标注库

当名为 iriszfCallout 库在实例的 <install_dir>/bin 目录中可用时,可以通过仅指定函数名称和参数的 $ZF 调用来调用其函数(例如,$ZF("functionName",arg1, arg2)).。无需事先加载库即可调用 iriszf 函数,并且实例中的所有进程都可以使用 iriszf 函数。

自定义 iriszf 库是通过创建标准 Callout 库、将其移动到实例的 <install_dir>/bin 目录并将其重命名为 iriszf(具体为 iriszf.dlliriszf.so,具体取决于平台)来定义的。

以下是编译 simplecallout.c 示例(请参阅“创建 Callout 库”)并将其设置为 iriszf 库的步骤。这些示例假设实例在 Linux 下运行,安装在名为 /intersystems/iris 的目录中,但所有平台上的过程基本相同:

  1. 编写并保存 simplecallout.c
#define ZF_DLL
#include "iris-cdzf.h"
int AddTwoIntegers(int a, int b, int *outsum) {
  *outsum = a+b;  /* set value to be returned by $ZF function call */
  return IRIS_SUCCESS;  /* set the exit status code */
}

ZFBEGIN
  ZFENTRY("AddInt","iiP",AddTwoIntegers)
ZFEND

  1. 生成Callout库文件(simplecallout.so):
gcc -c -fPIC simplecallout.c -I /intersystems/iris/dev/iris-callin/include/ -o simplecallout.o
gcc simplecallout.o -shared -o simplecallout.so
  1. IRIS 终端会话中使用 $ZF(-3) 测试库:
USER>write $ZF(-3,"/mytest/simplecallout.so","AddInt",1,4)
5
  1. 现在安装该库以与 $ZF() 一起使用。将 simplecallout.so 复制到 <install_dir>/bin中,并将其重命名为 iriszf.so
cp simplecallout.so /intersystems/iris/bin/iriszf.so
  1. 确认可以从 IRIS 会话中使用 $ZF() 调用代码:
USER>write $zf("AddInt",1,4)
5

iriszf 库在首次使用时加载一次,并且永远不会卸载。它完全独立于本章前面描述的其他 $ZF 加载和卸载操作。

注意:静态链接库 $ZF Callout Interface 的早期版本允许将代码静态链接到 InterSystems 内核并使用 $ZF() 进行调用。不再支持静态链接,但 irisz 库提供相同的功能,无需重新链接内核。

上一篇 下一篇

猜你喜欢

热点阅读