EGL 使用自变量堆栈来调用 C 函数,这是在函数与调用代码之间传递自变量的一种机制。EGL 调用函数将其自变量推进堆栈,而被调用的 C 函数将它们弹出堆栈以使用这些值。被调用函数将其返回值推进堆栈,而调用程序将它们弹出来以检索这些值。出栈外部函数和返回外部函数是随自变量堆栈库一起提供的。返回外部函数在下面作出描述;使用的出栈外部函数在 C 的堆栈函数中作了描述。
外部返回函数将其自变量复制至在调用函数外部分配的存储空间。此存储空间会在返回值被弹出堆栈时释放。这样就可以从函数的局部变量返回值了。
用于返回值的库函数
下列库函数对返回值可用:
版本 7.31 之前的版本名称 | 版本 7.31 和更新版本名称 |
---|---|
retint | ibm_lib4gl_returnMInt |
retshort | ibm_lib4gl_returnInt2 |
retlong | ibm_lib4gl_returnInt4 |
retflo | ibm_lib4gl_returnFloat |
retdub | ibm_lib4gl_returnDouble |
retdec | ibm_lib4gl_returnDecimal |
retquote | ibm_lib4gl_returnQuotedStr |
retstring | ibm_lib4gl_returnString |
retvchar | ibm_lib4gl_returnVarChar |
retdate | ibm_lib4gl_returnDate |
retdtime | ibm_lib4gl_returnDateTime |
retinv | ibm_lib4gl_returnInterval |
ibm_lib4gl_returnQuotedStr( ) 的自变量是以 null 结束的字符串。包括 ibm_lib4gl_returnString( ) 函数只是为了对称;它在内部调用 ibm_lib4gl_returnQuotedStr( )。
只要方便,C 函数可以返回任何格式的数据。如果可以转换,EGL 会在将值弹出堆栈时对数据类型进行必要的转换。如果不能进行数据类型转换,将发生错误。
从 EGL 调用的 C 函数总是使用语句 return(n) 退出的,其中 n 是推送至堆栈的返回值的数目。不返回任何内容的函数必须用 return(0) 退出。