第十三章 创建Callout Library - 兼容的语言和编译器
2024-01-03 09:46:33
第十三章 创建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
。
文章来源:https://blog.csdn.net/yaoxin521123/article/details/135354145
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!