文章
· 十二月 27, 2023 阅读大约需 2 分钟

第七章 创建Callout Library - 创建 ZFEntry 表

第七章 创建Callout Library - 创建 ZFEntry 表

创建 ZFEntry

每个 Callout 库必须定义一个 ZFEntry 表,该表允许 IRIS 加载和访问 Callout 函数。 ZFEntry 表由以 ZFBEGIN 开头、以 ZFEND 结尾的宏代码块生成。在这两个宏之间,必须为要公开的每个函数调用一次 ZFENTRY 宏。

每个 ZFENTRY 调用都采用三个参数:

   ZFENTRY(zfname,linkage,entrypoint)

其中 zfname 是用于在 $ZF 调用中指定函数的字符串,linkage 是指定如何传递参数的字符串,entrypointC 函数的入口点名称。

要创建 Callout 库,代码必须包含 #define ZF_DLL 指令,该指令是一个开关,可生成用于定位库函数的内部 GetZFTable 函数。加载 Callout 库时, IRIS 调用此函数来初始化该库,以便后续查找库函数名称。

注意:ZFEntry 序列号

ZFEntry 表中条目的位置可能很重要。 $ZF(-5)$ZF(-6) 接口(在“调用标注库函数”中描述)都通过指定表中的序列号(从 1 开始)来调用库函数。例如,$ZF(-6) 将通过以下调用调用 ZFEntry 表中的第三个函数:

   x = $ZF(-6,libID,3)

其中 libID 是库标识符,3 是表中第三个条目的序列号。

注意:预编译头文件

某些编译器(例如 Microsoft Visual Studio)支持预编译头。如果使用预编译头,则 #define ZF_DLL 语句必须对预编译有效。如果不是,生成的 dll 在使用时将导致 <DYNAMIC LIBRARY LOAD> 错误。强烈建议不要将预编译头用于 Callout 库。

讨论 (0)1
登录或注册以继续