第十三章 创建Callout Library - 兼容的语言和编译器

发布时间:2024年01月03日

第十三章 创建Callout Library - 兼容的语言和编译器

兼容的语言和编译器

使用 $ZF Callout Interface,可以用外部语言编写函数并从 ObjectScript 调用它们。标注库通常用 C 编写,但也可能用使用 C 编译器理解的调用约定的任何其他编译语言编写。出现两个兼容性问题。首先,编译器必须使用与 C 兼容的应用程序二进制接口 (ABI)。其次,编译器生成的代码必须不依赖于与 IRIS 不兼容的任何运行时库功能。

InterSystems 支持使用与我们在所有平台上生成 IRIS 相同的 C 编译器:

PlatformCompiler
IBM AIXIBM XL C for AIX
Mac OS X (Darwin)Xcode
Microsoft WindowsMicrosoft Visual Studio
Linux (all variants)GNU Project GCC C

大多数平台都有标准化的应用程序二进制接口 (ABI),使大多数编译器兼容。 Intel x86-32x86-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 库时,可能需要在链接过程中显式导出符号 ZFInitZFUnload

文章来源:https://blog.csdn.net/yaoxin521123/article/details/135354145
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。