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.

Anmerkung: Die Abruffunktionen wurden ursprünglich mit IBM® Informix 4GL (I4GL) verwendet. Daher stammt der Teil '4gl' im Funktionsnamen.

Bibliotheksfunktionen für die Rückgabe von Werten

Sie können die folgenden Bibliotheksfunktionen aus einer C-Funktion aufrufen, um Zahlenwerte aus dem Argumentstack abzurufen:
In der folgenden Tabelle sowie den sich daran anschließenden Tabellen sind die Zuordnungen der Rückgabefunktionsnamen zwischen den Vorversionen von 7.31 von I4GL sowie Version 7.31 und höher aufgeführt:
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
Wie alle Bibliotheksfunktionen für den Abruf von Werten führen alle diese Funktionen die folgenden Aktionen aus:
  1. Ein Wert wird aus dem Argumentstack entfernt.
  2. Bei Bedarf wird sein Datentyp konvertiert. Falls der Wert im Stack nicht in den angegebenen Typ konvertiert werden kann, tritt ein Fehler auf.
  3. 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

Durch den Aufruf der folgenden Bibliotheksfunktionen können Sie Zeichenwerte abrufen:
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.

Das Argument len legt die maximale Größe des Empfangszeichenfolgepuffers fest. Bei Verwendung von ibm_lib4gl_popQuotedStr( ) werden exakt len Byte (inklusive abschließender Leerzeichen und Nullbyte) selbst dann empfangen, wenn der Wert im Stack eine leere Zeichenfolge ist. Um die wirkliche Datenlänge einer mit ibm_lib4gl_popQuotedStr( ) abgerufenen Zeichenfolge zu ermitteln, müssen Sie nachfolgende Leerzeichen aus dem abgerufenen Wert entfernen.
Anmerkung: Die Funktionen ibm_lib4gl_popString( ) und ibm_lib4gl_popQuotedStr( ) sind quasi identisch. Der einzige Unterschied besteht darin, dass die Funktion ibm_lib4gl_popString( ) abschließende Leerzeichen automatisch abschneidet.

Bibliotheksfunktionen für den Abruf von Zeitwerten

Durch einen Aufruf der folgenden Bibliotheksfunktionen können Sie Werte des Typs DATE, INTERVAL, und DATETIME (TIMESTAMP) abrufen:
Zum Abrufen von Werten des Typs TIMESTAMP können Sie die folgende Bibliotheksfunktion aufrufen:
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

Durch einen Aufruf der folgenden Funktion können Sie ein Argument für BYTE oder TEXT abrufen:
Name bei Version vor 7.31 Name bei Version 7.31 und höher
poplocator ibm_lib4gl_popBlobLocator
Der Strukturtyp loc_t definiert einen Wert des Typs BYTE oder TEXT. Eine Erläuterung finden Sie in der Veröffentlichung IBM Informix ESQL/C Programmer's Manual .

Jedes Argument für BYTE oder TEXT muss als Typ BYTE oder TEXT abgerufen werden, weil EGL keine automatische Datentypkonvertierung bereitstellt.


Feedback