View Full Version : Arbeitet man heute noch mit Pointern?
...dazu fällt mir eine andere Frage ein: Ich habe neulich mal versucht, für UIM ein User-Exit-Program mittels Procedurepointer zu registrieren. Um die Adresse meiner Prozedur zu ermitteln, habe ich in RPG die Funktion %PADDR verwendet. Leider wurde dieses Vorhaben jedoch zur Laufzeit vom System abgewiesen, weil es sich dabei nicht um ein Zeiger im TERA-Space handeln soll. Beim RPG-Compiler habe ich im Gegensatz zu C aber nicht die Möglichkeit Storage Model Teraspace auszuzwählen. Heißt dies, dass ich das so in RPG nicht machen kann oder gibts ne andere Lösung?
Gruß, Titus
Hallo,
kannst du das Problem mal genauer beschreiben? ich verwende Procedure Pointer zum dynamischen binden seit längerem und habe damit keine Probleme, ich ermittle mir diese zwar per API, aber das sollte mit %PADDR eigentlich auch keine Schwierigkeiten machen.
mfg
Dieter Bender
...dazu fällt mir eine andere Frage ein: Ich habe neulich mal versucht, für UIM ein User-Exit-Program mittels Procedurepointer zu registrieren. Um die Adresse meiner Prozedur zu ermitteln, habe ich in RPG die Funktion %PADDR verwendet. Leider wurde dieses Vorhaben jedoch zur Laufzeit vom System abgewiesen, weil es sich dabei nicht um ein Zeiger im TERA-Space handeln soll. Beim RPG-Compiler habe ich im Gegensatz zu C aber nicht die Möglichkeit Storage Model Teraspace auszuzwählen. Heißt dies, dass ich das so in RPG nicht machen kann oder gibts ne andere Lösung?
Gruß, Titus
Hallo Dieter,
ich habe eineAnzeigengruppe mittels UIM erstellt. Dort kann man z.B. zum Prüfen von Daten Exit-Programs hinterlegen. Man gibt dazu im Schlüsselwort USREXIT eine Variable vom Typ PTR an. Diese Variable muss man vor Anzeige der PNLGRP mit einem Zeiger auf die Prozedur setzen, die UIM aufrufen soll. Das habe ich in RPG mit der Funktion %PADDR gemacht. Es ließ sich auch alles kompilieren. Leider kam es zur Ausführung aber zur genannten Exception. Die Nachrichten-ID habe ich jetzt leider nicht gerade zur Hand, weil ich erstmal wieder auf traditionellen Aufruf per Programmname umgestellt hatte. Es lag aber wohl daran, dass mein Programm nicht mit STGMDL(*TERASPACE) erstellt wurde. Was wiederum nicht ging, weil es für den Befehl CRTRPGMOD keinen solchen Parameter gibt.
Nun habe ich mich mit den Speichermodellen bisher nicht beschäftigt und bin mir nicht sicher, ob es wirklich unter RPG nicht geht oder ob ich etwas falsch gemacht habe.
Titus
Hallo,
nochmal: in RPG kann man mit Procedure Pointern arbeiten, das hat mit Terraspace nix zu tun, mit dem UIM Krempel habe ich mich mal vor Urzeiten im Kontext mit Menüs beschäftigt, da kann ich nix zu sagen und deine Beschreibung über das, was du da versucht hast, ist immer noch entschieden zu vage, da bräuchte man mal Quellen, listings, Fehlermeldung, o.ä.
mfg
Dieter Bender
Hallo Dieter,
ich habe eineAnzeigengruppe mittels UIM erstellt. Dort kann man z.B. zum Prüfen von Daten Exit-Programs hinterlegen. Man gibt dazu im Schlüsselwort USREXIT eine Variable vom Typ PTR an. Diese Variable muss man vor Anzeige der PNLGRP mit einem Zeiger auf die Prozedur setzen, die UIM aufrufen soll. Das habe ich in RPG mit der Funktion %PADDR gemacht. Es ließ sich auch alles kompilieren. Leider kam es zur Ausführung aber zur genannten Exception. Die Nachrichten-ID habe ich jetzt leider nicht gerade zur Hand, weil ich erstmal wieder auf traditionellen Aufruf per Programmname umgestellt hatte. Es lag aber wohl daran, dass mein Programm nicht mit STGMDL(*TERASPACE) erstellt wurde. Was wiederum nicht ging, weil es für den Befehl CRTRPGMOD keinen solchen Parameter gibt.
Nun habe ich mich mit den Speichermodellen bisher nicht beschäftigt und bin mir nicht sicher, ob es wirklich unter RPG nicht geht oder ob ich etwas falsch gemacht habe.
Titus
Call by address
This type of call is used within OS/400
system programs to allow calls of other
system modules. Define the specified
dialog variable with BASETYPE='PTR'.
When the call function is requested, the
dialog variable must contain a system
pointer to the program. Ensure the proper
authority is contained in the pointer.
Mit anderen Worten:
ILE-Unterstützung keine !
Als Adresse ist nur die Adresse eines OPM bzw. Hauptprogrammes nicht einer Prozedur erlaubt !
Es gibt da noch das ominöse EPM (Extended Program Model), aber was das ist weiß ausser IBM wohl niemand mehr.
...aha, verstehe. Und von dieser EPM-Schnittstelle rät IBM sogar selbst ab. Im UIM-Handbuch war irgendwo von schlechter Performance die Rede.
Bezüglich UIM noch eine generelle Anmerkung meinerseits: UIM ist sicher im Vergleich zu Java-Swing etc. etwas veraltet. Es erlaubt aber für OS/400 Dialoge und Berichte zu gestalten, die bezüglich Oberfläche absolut Systemkonform sind. In der Tool-Programmierung ist dies schon recht wichtig.
Gruß, Titus