Para llamar una función C, EGL utiliza una pila de argumentos, un mecanismo que pasa argumentos entre las funciones y el código de llamada. La función de llamada de EGL pone los argumentos en la pila y la función C llamada los saca de la pila para utilizar los valores. La función llamada pone los valores de retorno en la pila y el llamador los saca para recuperar los valores. Las funciones externas de extracción y de llamada se proporcionan con la biblioteca de pila de argumentos. Las funciones externas de retorno se describen a continuación; las funciones externas de extracción se describen en el apartado Recibir valores de EGL.
Las funciones de retorno externas copian sus argumentos en el almacenamiento asignado fuera de la función de llamada. Este almacenamiento se libera cuando se extrae el valor devuelto. Esta situación posibilita la devolución de valores de variables locales de la función.
Funciones de biblioteca para devolver valores
Las funciones de biblioteca siguientes están disponibles para devolver valores:
Nombre anterior a la Versión 7.31 | Nombre de la Versión 7.31 y posteriores |
---|---|
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 |
El argumento de ibm_lib4gl_returnQuotedStr( ) es una serie terminada en nulo. La función ibm_lib4gl_returnString( ) se incluye solo por simetría; internamente llama a ibm_lib4gl_returnQuotedStr( ).
La función C puede devolver datos de cualquier forma que sea conveniente. Si la conversión es posible, EGL convierte el tipo de datos según sea necesario al extraer el valor. Si la conversión de tipo de datos no es posible, se produce un error.
Las funciones C llamadas desde EGL deben salir siempre con la sentencia return(n), donde n es el número de valores de retorno puestos en la pila. Una función que no devuelve nada debe salir con return(0).