PDA

View Full Version : Alternative zu *ENTRY PLIST



Seiten : [1] 2

Rincewind
15-01-04, 11:41
Hallo zusammen,

ich arbeite erst seit kurzem Mit richtigen ILE Programmen (vorher haben wir zwar ILE Programme gehabt, jedoch nur mit RPGIII befehlen).

Also:

Ich habe ein Programm welches ein Subfile anzeigt.
Diese Informationen sollen einigen anderen Programmen zugänglich gemacht werden, sprich: Die sollen dieses Programm aufrufen.
Das Subfileprogramm ist ein RPGLE.


:confused:
Wie übergebe ich die Paramter mit RPG/III Programmen?

Eigentlich will ich keine *ENTRY PLIST mehr haben sondern lieber die PI Variante nutzen (Gefällt mir besser, alle Parameter lassen sich gut nachschauen).

Solange wie das aufrufende Programm ein RPGLE Programm ist kann ich das ja entsprechend definieren, aber was mache ich mit RPG Programmen?

Bleibt mir wirklich nur der CVTRPGSRC um dann das PI nutzen zu können, oder gibt es da einen Trick?


Danke euch schonmal

Rince

Fuerchau
15-01-04, 11:45
RPG kennt nur PLIST !

Rincewind
15-01-04, 11:51
Wow, das nenn ich mal schnelle Hilfe.

Schade irgendwie, dann muss ich weiterhin mit PLIST arbeiten..

Rince

B.Hauser
15-01-04, 13:42
Hallo Rince,

Habe ich das richtig verstanden, Du willst in Deinen alten RPGIII Programmen die *Entry-PLIST durch Procedure Interface ersetzen.
Wie willst Du das überhaupt machen? D-Bestimmungen gibt es in RPGIII nicht!

Was soll das bringen? Neuprogrammierungen sollten in RPGIV gemacht werden und alte Programme sollten unverändert bleiben.

Fazit ist:
RPGIII ist und bleibt tot!!!
Nur RPGIV wird weiterentwickelt.
Du wirst also schon den Convert machen müssen.

Wenn RPGIII-Programme aus ILE aufgerufen werden sollen,
kannst Du für die RPGIII Programme Prototypen definieren und anschliessend über CALLP aufrufen.

Das Schlüssel-Wort EXTPGM muss natürlich definiert werden.

Birgitta

Rincewind
15-01-04, 13:58
Hy Brigitta,

da scheinst du mich falsch verstanden zu haben.

Ich stimme zu: RPGIII ist tot.

Klar ist RPGIV viel toller, daher möchte ich ja ungerne in den RPG/IV Programmen wieder mit *ENTRY PLIST arbeiten, sondern die schöne Art der PI benutzen.

Nur leider habe ich noch alte Programme die dieses Neue Programm aufrufen sollen (mit Parametern)

Da ich die alten Programme nicht einfach umsetzen will (mit CVTRPGSRC) suche ich nach einem Weg beides zu schaffen.
Alte RPG/III Programme behalten,
neue RPG/IV Programme ohne PLIST schreiben (sonst muss ich ja aus anderen RPG/IV Programmen auch die PLIST nutzen *schauder*



Ich überlege nur ob ich das vielleicht mit Hilfe eines CLLE schaffen kann, nur habe ich da noch nie eine PI definiert.

Weiss da vielleicht jemand wie das geht?

Fuerchau
15-01-04, 14:07
In CLLE heißt das dann CALLPRC !

Allerdings gilt das nur für gebundene Module, alles andere muss wie immer per CALL aufgerufen werden.

BenderD
15-01-04, 15:00
Hallo,

zu der Diskussion welches RPG töter ist, will ich mich mal zurückhalten, das bringt meist Ärger :-)
Prototypen, PI, *ENTRY PLIST sind reine Compiler Anweisungen, im fertigen Programm ist das relativ schnurz. Man kann also lustig rpg4 mit PI für das Main programmieren und ohne Prototyp mit CALL PARM aufrufen, man verliert dabei lediglich die Prüfung zur Compiletime. Probleme mit der Rückwärtskompatibilität gibt es nur, wenn man für die Schnittstellen parameter Erweiterungen benutzt, wie zum Beispiel Feldtypen, die beim Altsteinzeit RPG nicht erlaubt waren.

mfg

Dieter Bender

Rincewind
15-01-04, 16:01
Herzlichen Dank :)

Wenn ich das *NOPASS weglasse klappt es.
und dann frage ich einfach mit QPARMS ab ob der PArameter da ist oder nicht.

Auf CONST muss ich dann leider verzichten, aber das ist ein geringes Problem.


Ich muss wirklich sagen, dieses Forum gefällt mir vor allem wegen der schnellen und kompetenten Antwortzeit.

DANKE

Rince

BenderD
15-01-04, 17:08
Hallo,

die passing options, wie *NOPASS fallen auch unter die Inkompatibilitäten, weil neu. CONST ist immer noch verwendbar, da wird eigentlich nur im aufgerufenen programm code reingesetzt, der dafür sorgt, dass die Referenz read only ist und selbiges ist ja ILE. Im aurufenden Programm ist das eigentlich Banane, da bekommt der Programmierer nur die Sicherheit, dass zumindest bei konsistenten Prototypen, die übergebenen Parameter nicht vermüllt zurück kommen.

mfg

Dieter Bender

Fuerchau
15-01-04, 17:46
Ob ein Parameter eine gültige Adresse enthält, schließlich kann man auch NULL-Adressen übergeben (z.B. optionale Parameter bei CMD's mit Rückgabefeldern e.g. RTVJOBA, und die können auch zwischndrin auftauchen), muss man explizit erfragen:

if %addr(parmx) <> *NULL
:
endif

Und da muss ich Dieter Recht geben, CONST dient nur dem Compiler.
Wenn ich sicher sein will, dass ich meinen Übergabewert nicht geändert haben will, muss ich VALUE definieren. In diesem Fall wird dem gerufenen Programm immer eine Kopie übergeben und das kann dann tun und lassen was es will (egal ob CONST oder nicht).

Übrigens: VALUE führt ggf. auch eine TYP-Konvertierung durch, soweit der Compiler das halt kann und ich bin nicht an gleichartige Definitionen gebunden.