从 EGL 接收值

EGL 使用自变量堆栈来调用 C 函数,这是在函数与调用代码之间传递自变量的一种机制。EGL 调用函数将其自变量推进堆栈,而被调用的 C 函数将它们弹出堆栈以使用这些值。被调用函数将其返回值推进堆栈,而调用程序将它们弹出来以检索这些值。出栈和返回外部函数是随自变量堆栈库提供的。下面按每次从自变量堆栈弹出的值的数据类型描述出栈外部函数。返回外部函数在将值返回至 EGL 中作了描述。

注: 出栈函数最初与 IBM® Informix® 4GL(I4GL)配合使用;因此会将“4gl”包括在函数名中。

用于返回值的库函数

可从 C 函数调用下列库函数以将数字值弹出自变量堆栈:
下表和下面类似的表映射 I4GL 版本 7.31 之前的版本与版本 7.31 和更新版本之间的返回函数名:
版本 7.31 之前的版本名称 版本 7.31 和更新版本名称
popint ibm_lib4gl_popMInt
popshort ibm_lib4gl_popInt2
poplong ibm_lib4gl_popInt4
popflo ibm_lib4gl_popFloat
popdub ibm_lib4gl_popDouble
popdec ibm_lib4gl_popDecimal
其中每个函数(如用于将值弹出堆栈的所有库函数)执行下列操作:
  1. 从自变量堆栈除去一个值。
  2. 在必要时转换其数据类型。如果堆栈上的值不能转换为指定的类型,将发生错误。
  3. 将该值复制至指定的变量。

结构类型 dec_tifx_int8_t 用于表示 C 程序中的 DECIMAL 和 BIGINT 数据。有关用于处理和打印 DECIMAL 和 BIGINT 变量的 dec_tifx_int8_t 结构类型和库函数的更多信息,请参阅 IBM Informix ESQL/C Programmer's Manual

用于将字符串弹出堆栈的库函数

可调用下列库函数以将字符值弹出堆栈:

版本 7.31 之前的版本名称 版本 7.31 和更新版本名称
popquote ibm_lib4gl_popQuotedStr
popstring ibm_lib4gl_popString
popvchar ibm_lib4gl_popVarChar

ibm_lib4gl_popQuotedStr( )ibm_lib4gl_popVarChar( ) 将正好 len 个字节复制至字符串缓冲区 *qv。此处 ibm_lib4gl_popQuotedStr( ) 在必要时将填充空格,但 ibm_lib4gl_popVarChar( ) 不会填充至标准长度。复制至缓冲区的最后一个字节是用于终止字符串的空字节,所以最大字符串数据长度为 len-1。如果放入堆栈的自变量的长度超过 len-1,则超出部分会丢失。

len 自变量设置接收字符串缓冲区的最大大小。使用 ibm_lib4gl_popQuotedStr( ),可以刚好接收 len 个字节(包括结尾空格和空字节),即使堆栈上的值为空字符串也是如此。要查找 ibm_lib4gl_popQuotedStr( ) 检索到的字符串的真实数据长度,必须修剪出栈值的空格。
注: 除了函数 ibm_lib4gl_popString( ) 会自动修剪所有结尾空格外,函数 ibm_lib4gl_popString( )ibm_lib4gl_popQuotedStr( ) 是完全相同的。

用于将时间值弹出堆栈的库函数

可调用下列库函数以将 DATE、INTERVAL 和 DATETIME (TIMESTAMP) 弹出堆栈:

可调用下列库函数以将 TIMESTAMP 值弹出堆栈:
版本 7.31 之前的版本名称 版本 7.31 和更新版本名称
popdate ibm_lib4gl_popDate
popdtime ibm_lib4gl_popDateTime
popinv ibm_lib4gl_popInterval

结构类型 dtime_tintrvl_t 用于表示 C 程序中的 DATETIME 和 INTERVAL 数据。qual 自变量接收 DATETIME 或 INTERVAL 限定符的二进制表示。有关用于处理和打印 DATE、DATETIME 和 INTERVAL 变量的 dtime_tintrvl_t 结构类型和库函数的更多信息,请参阅 IBM Informix ESQL/C Programmer's Manual

用于将 BYTE 或 TEXT 值弹出堆栈的库函数

可调用以下函数以将 BYTE 或 TEXT 自变量弹出堆栈:
版本 7.31 之前的版本名称 版本 7.31 和更新版本名称
poplocator ibm_lib4gl_popBlobLocator
结构类型 loc_t 定义 BYTE 或 TEXT 值,这在 IBM Informix ESQL/C Programmer's Manual 中作了讨论。

BYTE 或 TEXT 自变量必须作为 BYTE 或 TEXT 弹出堆栈,原因是 EGL 不提供自动数据类型转换。

相关参考
C 的 BIGINT 函数
C 数据类型和 EGL 基本类型
从 EGL 程序调用 C 函数
将 C 函数与 EGL 配合使用
C 的 DATE 函数
C 的 DATETIME 和 INTERVAL 函数
C 的 DECIMAL 函数
IBM Informix ESQL/C Programmer’s Manual
将值返回至 EGL

使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.