第七章 创建Callout Library - 创建 ZFEntry 表
创建 ZFEntry
表
每个 Callout
库必须定义一个 ZFEntry
表,该表允许 IRIS
加载和访问 Callout
函数。 ZFEntry
表由以 ZFBEGIN
开头、以 ZFEND
结尾的宏代码块生成。在这两个宏之间,必须为要公开的每个函数调用一次 ZFENTRY
宏。
每个 ZFENTRY
调用都采用三个参数:
ZFENTRY(zfname,linkage,entrypoint)
其中 zfname
是用于在 $ZF
调用中指定函数的字符串,linkage
是指定如何传递参数的字符串,entrypoint
是 C
函数的入口点名称。
要创建 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
库。
网友评论