Stackfunktionen für C
Zum Aufrufen einer C-Funktion verwendet EGL einen Argumentstack. Dies ist ein Mechanismus, der Argumente zwischen den Funktionen und dem aufrufenden Code übergibt. Die aufrufende EGL-Funktion ü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 Abruffunktionen sind nachfolgend für die verschiedenen Datentypen des Wertes beschrieben, der jeweils aus dem Argumentstack abgerufen wird. Die externen Funktionen für die Rückgabe sind unter Rückgabefunktionen für C beschrieben.
Bibliotheksfunktionen für die Rückgabe von Werten
- extern void ibm_lib4gl_popMInt(int *iv)
- extern void ibm_lib4gl_popInt2(short *siv)
- extern void ibm_lib4gl_popInt4(int *liv)
- extern void ibm_lib4gl_popFloat(float *fv)
- extern void ibm_lib4gl_popDouble(double *dfv)
- extern void ibm_lib4gl_popDecimal(dec_t *decv)
- extern void ibm_lib4gl_popInt8(ifx_int8_t *bi)
| Name bei Version vor 7.31 | Name bei Version 7.31 und höher |
|---|---|
| popint | ibm_lib4gl_popMInt |
| popshort | ibm_lib4gl_popInt2 |
| poplong | ibm_lib4gl_popInt4 |
| popflo | ibm_lib4gl_popFloat |
| popdub | ibm_lib4gl_popDouble |
| popdec | ibm_lib4gl_popDecimal |
- Ein Wert wird aus dem Argumentstack entfernt.
- Bei Bedarf wird sein Datentyp konvertiert. Falls der Wert im Stack nicht in den angegebenen Typ konvertiert werden kann, tritt ein Fehler auf.
- Der Wert wird in die angegebene Variable kopiert.
Mit den Strukturtypen dec_t und ifx_int8_t werden Daten des Typs DECIMAL und BIGINT in einem C-Programm dargestellt. Weitere Informationen zu den Strukturtypen dec_t und ifx_int8_t sowie den Bibliotheksfunktionen für das Bearbeiten und Drucken von Variablen des Typs DECIMAL und BIGINT enthält die Veröffentlichung IBM Informix ESQL/C Programmer's Manual.
Bibliotheksfunktionen für den Abruf von Zeichenfolgen
- extern void ibm_lib4gl_popQuotedStr(char *qv, int len)
- extern void ibm_lib4gl_popString(char *qv, int len)
- extern void ibm_lib4gl_popVarChar(char *qv, int len)
| Name bei Version vor 7.31 | Name bei Version 7.31 und höher |
|---|---|
| popquote | ibm_lib4gl_popQuotedStr |
| popstring | ibm_lib4gl_popString |
| popvchar | ibm_lib4gl_popVarChar |
Sowohl ibm_lib4gl_popQuotedStr( ) als auch ibm_lib4gl_popVarChar( ) kopiert exakt len Byte in den Zeichenfolgepuffer *qv. Hierbei füllt ibm_lib4gl_popQuotedStr( ) wie benötigt mit Leerzeichen auf. ibm_lib4gl_popVarChar( ) nimmt jedoch keine Auffüllung auf die vollständige Länge vor. Das letzte in den Puffer kopierte Byte ist ein Nullbyte für die Beendigung der Zeichenfolge. Die maximale Länge der Zeichenfolgedaten beträgt somit len-1. Ist das Argument im Stack länger als len-1, gehen seine abschließenden Byte verloren.
Bibliotheksfunktionen für den Abruf von Zeitwerten
- extern void ibm_lib4gl_popDate(int *datv)
- extern void ibm_lib4gl_popInterval(intrvl_t *iv, int qual)
- extern void ibm_lib4gl_popDateTime(dtime_t *dtv, int qual)
| Name bei Version vor 7.31 | Name bei Version 7.31 und höher |
|---|---|
| popdate | ibm_lib4gl_popDate |
| popdtime | ibm_lib4gl_popDateTime |
| popinv | ibm_lib4gl_popInterval |
Mit den Strukturtypen dtime_t und intrvl_t werden Daten des Typs DATETIME und INTERVAL in einem C-Programm dargestellt. Das Argument qual empfängt die binäre Darstellung des Qualifikationsmerkmals für DATETIME oder INTERVAL. Weitere Informationen zu den Strukturtypen dtime_t und intrvl_t sowie zu Bibliotheksfunktionen für das Bearbeiten und Drucken von Variablen des Typs DATE, DATETIME und INTERVAL enthält die Veröffentlichung IBM Informix ESQL/C Programmer's Manual.
Bibliotheksfunktionen für den Abruf von Werten des Typs BYTE oder TEXT
- extern void ibm_lib4gl_popBlobLocator(loc_t **blob)
| Name bei Version vor 7.31 | Name bei Version 7.31 und höher |
|---|---|
| poplocator | ibm_lib4gl_popBlobLocator |
Jedes Argument für BYTE oder TEXT muss als Typ BYTE oder TEXT abgerufen werden, weil EGL keine automatische Datentypkonvertierung bereitstellt.