-
Auch Pointer lösen das Problem nicht, da an das aufgerufene Programm sowieso nur Pointer übergeben werden.
Aufrufparameter stellen eine Konvention dar, die genauestens einzuhalten ist.
Eine Laufzeitprüfung über den Typ gibt es leider nicht.
Bei CLP's wird zumindest die Anzahl der Parameter festgelegt (siehe DSPPGM), bei HLL's (COBOL, RPGLE) noch nicht mal das. Hier kann man zwischen 0 und 255 Parametern übergeben, egal ob sie gebraucht werden oder nicht.
Eine Typisierung bzw. Typprüfung wird nicht unterstützt, man kann nocht nicht mal die Art der Definition (Zeichen, Numerisch, usw.) per Programm prüfen außer per MONMSG (bzw. Monitor-Anweisung) eine MCH-Überwachung zu programmieren.
Ich habe mir des öfteren Wrapper-CLP's geschrieben, die die Parameter nur mit CHAR(1) definiert haben, um dann die "Adressen" der Parameter an die nächste Ebene zu üergeben.
CMD's sind eine gute Lösung dieses Problem zu lösen, wenn das Programm per Kommandozeile oder QCMDEXC aufgerufen wird.
Zumal sich mit optionalen Parametern dann Defaults übergeben lassen.
Aufgerufen wird dann nicht das Kommando CALL sondern das per CRTCMD erstellte Kommando (genau wie alle anderen Kommandos des Systems).
-
Oder man macht es wie IBM: Das CL nimmt 2 Parameter entgegen, der eine enthält die Zeichenkette, der andere die Anzahl übergebener Bytes.
Berühmtestes Beispiel dafür wäre:
CALL QCMDEXC ('DSPMSG' 6)
Kommandos sind praktisch, aber ich finde sie aus RPG heraus so schlecht aufrufbar.
Hier ein paar technische Details zu Parametern:
Bei einem Call werden für Parameter nur Pointer übergeben. Diese zeigen auf den Speicherbereich, der im rufenden Programm festgelegt wird.
Es kann passieren, dass das gerufene Programm in einem zu lang definierten Parameter Daten sieht, die nicht für diesen Parameter bestimmt sind.
Wenn man also weiß wie lang Daten gefüllt sind, kann man das mit %SST rausziehen.
Nebenbei: Lustig bei Parametern ist auch, wenn man im rufenden Programm eine Variable _mehrfach_ angibt.
Dann ist im gerufenen Programm der Effekt, dass wenn der eine Parameter verändert wird, der andere wie von Geisterhand ebenfalls geändert ist. (Da habe ich mal lange debuggt und war fast verzweifelt...)
-
Das kann bei ILE nicht mehr passieren, wenn der Parameter als CONST definiert wird.
Dann legt der Compiler eine Kopie an und kopiert den Inhalt.
Similar Threads
-
By Robi in forum NEWSboard Programmierung
Antworten: 23
Letzter Beitrag: 17-01-13, 16:31
-
By Kampi4 in forum NEWSboard Programmierung
Antworten: 5
Letzter Beitrag: 09-10-06, 11:19
-
By Xanas in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 28-08-06, 13:21
-
By TARASIK in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 24-08-06, 11:09
-
By cheffe1008 in forum NEWSboard Programmierung
Antworten: 7
Letzter Beitrag: 16-05-06, 08:45
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks