Zum Hauptinhalt springen

Call

Call(alpha1[, ...]) : var

Ausführbar von Clients mit grafischer Oberfläche Ausführbar vom Server Ausführbar von Clients mit Programmierschnittstelle Ausführbar von der Web-Schnittstelle Ausführbar vom Druckprozessor Ausführbar von der ODBC-Schnittstelle Ausführbar vom SOA-Service

Prozedurfunktion aufrufen

Details

Mit dieser Funktion kann eine variable Prozedurfunktion oder Prozedur aufgerufen werden. (alpha1) bezeichnet den Namen der Funktion, wobei die Notation <Prozedurname:Funktionsname> zu verwenden ist. Wird der Funktionsname weggelassen, findet ein Aufruf der main-Funktion statt. Es können bis zu 64 weitere Argumente für die Funktion übergeben werden. Die Richtigkeit der Argumenttypen wird erst zur Laufzeit überprüft.

Steht der Name der aufgerufenen Funktion zum Übersetzungszeitpunkt fest, kann der Name der Prozedur und der Funktion direkt im Sourcecode in der Form <Prozedurname:Funktionsname> angegeben werden. Bei der Übersetzung kann dann auch die Existenz der Prozedur / Funktion überprüft werden. Folgende Anweisungen sind identisch:

Call('MyProc:MyFunc');
MyProc:MyFunc();

Das Resultat der aufgerufenen Funktion wird von dem Befehl zurückgegeben, sodass der Befehl Call() auch in Ausdrücken verwendet werden kann. Der Typ des Rückgabewertes wird erst zur Laufzeit überprüft.

Beispiel:

FuncName # 'Sum:Calc_' + CnvAI(CalcTyp, 0);
tResult # Call(FuncName, Val1, Val2);

Falls der Typ des Ausdrucks variabel oder nicht eindeutig bestimmt werden kann, muss eine Typdeklaration in der Form "typ( Call (...))" verwendet werden.

Beispiel:

FsiWrite(tHdl, int(Call(xy)));
if (alpha(Call(a1)) > 'xyz')
...

Stimmt zur Laufzeit der Typ nicht überein oder liefert die aufgerufene Funktion keinen Wert, erfolgt ein Laufzeitfehler.

Der Aufruf von Prozedurfunktionen kann auch wie folgt realisiert werden:

// Diff in derselben Prozedur oder main in der Prozedur Diff aufrufen
Diff(SaveVal, NewVal);

// Test in derselben Prozedur oder main in der Prozedur Test ohne Argument aufrufen
Test();

// TestNr in der Prozedur Ct.Check aufrufen
Ct.Check:TestNr();

Die Verarbeitung bleibt auf der Maschine, die diesen Befehl ausführt. Wird also in einer Prozedur, die mit RmtCall () aufgerufen wurde, die Anweisung Call() durchgeführt, wird die so aufgerufene Prozedur ebenfalls auf dem Server ausgeführt.

Mögliche Laufzeitfehler: