Zum Aufrufen einer C-Funktion verwendet EGL einen Argumentstack. Dies ist ein Mechanismus, der Argumente zwischen den Funktionen und dem aufrufenden Code übergibt. Die EGL-Aufruffunktion übergibt ihre Argumente an den Stack. Die aufgerufene C-Funktion ruft die Argumente aus dem Stack ab, um die Werte zu verwenden. Die aufgerufende Funktion übergibt ihre Rückgabewerte an den Stack. Die aufrufende Funktion ruft sie ab, um die Werte abzurufen. Die externen Funktionen für den Abruf und die Rückgabe werden mit der Argumentstackbibliothek bereitgestellt. Die externen Rückgabefunktionen (return) sind nachfolgend beschrieben. Die verwendeten externen Abruffunktionen (pop) sind unter Stackfunktionen für C beschrieben.
Die externen Rückgabefunktionen kopieren ihre Argumente in Speicher, der außerhalb der aufrufenden Funktion zugeordnet ist. Dieser Speicher wird freigegeben, sobald der zurückgegebene Wert mit 'pop' abgerufen wurde. Diese Situation ermöglicht die Rückgabe von Werten aus lokalen Variablen der Funktion.
Bibliotheksfunktionen für die Rückgabe von Werten
| Name bei Version vor 7.31 | Name bei Version 7.31 und höher |
|---|---|
| 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 |
Das Argument von ibm_lib4gl_returnQuotedStr( ) ist eine auf Null endende Zeichenfolge. Die Funktion ibm_lib4gl_returnString( ) ist nur aus Gründen der Symmetrie aufgeführt. Sie ruft intern die Funktion ibm_lib4gl_returnQuotedStr( ) auf.
Die C-Funktion kann Daten in jedem beliebigen Format zurückgeben. Falls eine Konvertierung möglich ist, konvertiert EGL beim Abrufen des Wertes den Datentyp wie erforderlich. Ist keine Konvertierung des Datentyps möglich, tritt ein Fehler auf.
C-Funktionen, die aus EGL aufgerufen werden, müssen stets die Anweisung return(n) als Exit verwenden, wobei n die Anzahl der Rückgabewerte ist, die in den Stack übertragen wurden. Eine Funktion, die keinen Wert zurückgibt, muss return(0) als Exit verwenden.