PDA

View Full Version : Umwandeln ILE RPG Programm



alex
01-08-02, 13:44
Hallo ILE Spezialisten,

will ein ILE RPG Programm umwandeln, in dem 2 ILE CL Programme über "CALLB" aufgerufen werden.

Jetzt bekomm ich bei der Umwandlung im Jobprotokoll folgende Fehlermeldungen:

Definition für Symbol 'LVRMDL02' nicht gefunden.
Definition für Symbol 'LVRMDL01' nicht gefunden.


Nachricht . . . : Definition für Symbol 'LVRMDL02' nicht gefunden.
Ursache . . . . : Für Referenz LVRMDL02 in *MODULE Objekt LVRPGMEM_N der
Bibliothek QTEMP wurde keine Definition gefunden. Entweder ist die Definition nicht vorhanden, oder sie gehört nicht zu Demselben Datentyp oder derselben Prozedurart wie die Referenz.
Was muss ich tun ? Wo muss ich such ?

holli
01-08-02, 15:24
Du solltes das Programm in zwei Schritten erstellen.

1. mit CRTMOD

2. mit CRTPGM, wobei hier unter dem Parameter Module alle Einzelmodule eingetragen werden müssen.

alex
02-08-02, 07:56
Vielen Dank für die Antwort,

wann setzt man den Befehl CRTBNDPGM zum
umwandeln ein ?

holli
02-08-02, 09:40
CRTPNDPGM kenne ich nicht. Solltest du CRTBNDRPG meinen, ist das der Befehl der ein ILE-RPG-Programm erstellt analog zu dem Befehl CRTRPGPGM.

Gruß Holli

B.Hauser
02-08-02, 12:30
Hallo Alex,

Du meinst bestimmt die Befehle CRTBNDRPG, CRTBNRCBL usw.
Mit diesen Befehlen können Quellen umgewandelt werden, die aus genau einem Modul bestehen, d.h. es dürfen keine Module oder Service-Programme mit dem Befehl CALLB aufgerufen werden.
Bei der Compilierung wird zunächst ein Modul erstellt. Aus diesem Modul dann ein Programm generiert und das Modul-Objekt wieder gelöscht.

Anmerkung :
Nur Programme können mit dem Befehl CALL aufgerufen werden (dynamisches Binden)
Module und Service-Programme müssen mit dem Befehl CALLB aufgerufen werden.
Der Befehl CALLP für den prototypisierten Aufruf ist eigentlich eine Compiler-Anweisung.
Je nach dem, ob ein Programm oder Modul oder Service-Programm aufgerufen wird, wird der Befehl in einen CALL oder CALLB umgewandelt.

Werden Module mit dem Befehl CALLB in einem Programm aufgerufen, wird zum Compile-Zeitpunkt eine Kopie des Moduls in das Programm eingebunden. (Bind by copy) Daraus folgt, wird ein solches Modul geändert, müssen alle Programme, in denen dieses Modul aufgerufen wird neu erstellt werden (CRTPGM oder UPDPGM).

Möchte man dies vermeiden, erstellt man aus den Modulen Service Programme und bindet diese in die Programme ein. Zum Compile-Zeitpunkt wird ein Symbol für das Service-Programm in das Programm eingebunden.(Bind by Reference) Über dieses Symbol wird das entsprechende Service-Programm zum Aktivierungs-Zeitpunkt gefunden.
Ändert sich das Modul, muss nur das zugehörige Service-Programm geändert werden (CRTSRVPGM oder UPDSRVPGM) und alle Programme, die dieses Service-Programm aufrufen arbeiten mit der neuen Version.

Ich hoffe das erklärt einiges

B.Hauser

alex
05-08-02, 06:24
Danke für die ausführliche Erläuterung !

Sven Schneider
05-08-02, 13:33
Hallo Alex,
der CMD CRTBNDRPG wurde in erster Linie dazu entwickelt RPG/III Programme (RPG/38 bzw. RPG/400 in der OPM-Umgebung) in die RPG/IV ILE-Umgebung zu retten. (in Verbindung mit CVTRPGSRC)
D.h. man kann zwar die meisten neuen Sprachelemente von RPG/IV verwenden, allerdings ohne die Konzepte von ILE.
Die Programme verhalten sich dann genauso wie OPM-Programme (laufen in der *DFTACTGRP und statisches Binden ist nicht möglich, also nur CALL)

Sven

B.Hauser
06-08-02, 07:13
Hallo Alex, Sven,

es ist nicht gesagt, dass Programme die mittels CRTBNDxxx umgewandelt wurden auch in der Default Activation Group aktiviert werden.

Default Activation Group ist nur der Unterlassungs-Wert.

Dies ist vorallem dann notwendig, wenn das Programm in einer ILE-Umgebung laufen soll.
z.B. wenn Commitment Control nur für die Activation Group (Unterlassungs-Wert) gestartet wurde.
Oder zum Steuern von Dateiüberschreibungen (OVRDBF)

B.Hauser