文章目录
- 第十三章 创建Callout Library - 兼容的语言和编译器
- 兼容的语言和编译器
- 标注库 Runup 和 Rundown 函数
第十三章 创建Callout Library - 兼容的语言和编译器
兼容的语言和编译器
使用 $ZF Callout Interface,可以用外部语言编写函数并从 ObjectScript 调用它们。标注库通常用 C 编写,但也可能用使用 C 编译器理解的调用约定的任何其他编译语言编写。出现两个兼容性问题。首先,编译器必须使用与 C 兼容的应用程序二进制接口 (ABI)。其次,编译器生成的代码必须不依赖于与 IRIS 不兼容的任何运行时库功能。
InterSystems 支持使用与我们在所有平台上生成 IRIS 相同的 C 编译器:
| Platform | Compiler | 
|---|---|
| IBM AIX | IBM XL C for AIX | 
| Mac OS X (Darwin) | Xcode | 
| Microsoft Windows | Microsoft Visual Studio | 
| Linux (all variants) | GNU Project GCC C | 
大多数平台都有标准化的应用程序二进制接口 (ABI),使大多数编译器兼容。 Intel x86-32 和 x86-64 平台是主要例外,这些平台存在多种调用约定。有关这些平台上的调用约定的讨论,请参阅 (https://en.wikipedia.org/wiki/X86_calling_conventions在。
许多 C 编译器允许为外部例程声明不同的调用约定。通过编写声明适当调用约定的 C 包装例程,可以调用用另一种语言编写的例程。
标注库 Runup 和 Rundown 函数
Callout 库可以包含自定义内部函数,这些函数将在加载(runup)或卸载(rundown)共享对象时调用。在这两种情况下都不会传递任何参数。函数使用如下:
- ZFInit— 当- $ZF(-3)、- $ZF(-4,1)或- $ZF(-6)首次加载标注库时调用。该函数的返回码应为零以指示不存在错误,或非零以指示存在问题。如果调用成功,则会保存- ZFUnload rundown函数的地址。
- ZFUnload— 当调用- $ZF(-3)卸载或替换- Callout库时,或者通过- $ZF(-4,2)或- $ZF(-4,4)卸载时调用。进程停止时不会调用它。如果在- rundown函数期间发生某些错误,将禁用对其的进一步调用,以允许卸载- Callout库。- ZFUnload的返回值当前被忽略。
构建 Callout 库时,可能需要在链接过程中显式导出符号 ZFInit 和 ZFUnload。