-
Parameteruebergabe von RPG an RPG-Pgm
Hallo ans Forum,
In einem RPG-Pgm rufe ich ein anderes RPG-Pgm (mit Parametern) auf.
Das aufzurufende PGM wurde mittels Prototyp u. EXTPGM definiert.
Dem aufzufenden Pgm werden zwischen 2 und 4 Parameter (Option(*NOPASS)) mitgegeben. Neben einen 10A Parameter handelt es bei den anderen um 100A-definierte Parameter.
Nun endlich zu meinem Problem:
Der (debug)Aufruf des
CALL PGM('PARM1' 'PARM2')
zeigte im Inhalt des/der 100A-definierten Parameter neben dem "normalen" Inhalt 'PARM2' auch irgendwelche anderen Daten!
Ich kann im aufrufenden PGM aber die Parametervariablen der PLIST nicht initialisieren um dies zu verhindern.
Hat jemand einen Rat für mich?
Danke schon mal vorab für die Mühen
GraueEminenz
-
Da beim Call nur Adressen übergeben werden hängt die Verarbeitung bzw. Anzeige der Daten von der jeweiligen Definition ab.
Erwarte ich ein 10-Stelliges Feld, übergebe aber weniger, so habe ich automatisch Zugriff auf die "dahinterliegenden" Informationen. Übergebe ich längere Daten, habe ich keinen Zugriff darauf.
Die Anzahl der übergebenen Parameter kann ich irgendwo in der SDS erfragen. Dies funktioniert aber nur bei der Einstiegsprozedur.
Alle anderen Prozeduren müssen die Adresse des Parameters prüfen:
if %addr(parm) = *null // Parameter nicht übergeben
Ansonsten kommt es zu MCH-Fehlern beim Zugriff.
Nun zu deinem CALL:
Das CALL-CMD hat eine eifache Regel bei der Übergabe von Werten:
Ist die Zeichenkette kürzer als 32, werden 32 Stellen mit Leerzeichen gefüllt übergeben
Ist die Zeichenkette länger als 32, werden genauso viele Zeichen übergeben
Zahlen werden immer im gepackten Format dec(15, 5) übergeben.
Da du nun 100 Zeichen erwartest, aber nur 32 übergibst, hast du halt 68 Zeichen Schrott.
-
Danke für die schnelle Antwort.
Dann werde ich dafür sorgen, immer 100 Zeichen zu übergeben.
GraueEminenz
-
Wenn du in der Prozedur die Felder als VALUE kennzeichnest, dann sollte es eigentlich doch auf funktionieren. Es werden dann die keine Referenzen(Adressen) übergeben, sondern die eigentlichen Werte.
Gruß
Sascha
-
Das CALL-CMD kennt keine Parameter "by value", was hier zu Testzwecken verwendet wird. Ausserdem ist aus Performance-Gründen ein Call by Reference immer schneller als ein Call by Value.
Die Ausnahmen hängen jedoch von der Programmiersprache ab. In RPGLE ist Value jedoch ein Konstrukt. Intern wird immer eine Kopie erstellt und dann doch nur die Adresse der Kopie übergeben.
Similar Threads
-
By mk in forum NEWSboard Java
Antworten: 8
Letzter Beitrag: 21-04-11, 21:51
-
By robertki in forum NEWSboard Programmierung
Antworten: 25
Letzter Beitrag: 19-01-07, 08:42
-
By timeless in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 11-01-07, 12:04
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 10-01-07, 10:58
-
By jth in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 21-12-06, 11:13
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