Anmelden

View Full Version : Displayfile Pointerübergabe



THH
16-12-05, 17:44
Hallo allesamt.

Ich habe mal wieder ein programmierproblem für ausgewachsene programmierer
hoffe jemand kann helfen.

Problem:
Ich habe ein Displayfile mit 4 Feldern.
alle felder sind mit returncursor deklariert,
damit ich bei F4 den feldnamen bekomme
und mit diesem dann ein externes programm aufrufen kann, dieses programm liefert mit im übergabefeld den wert für
dieses feld. wie zun geier bekomme ich nun den inhalt in das displayfile.


Beispiel

Feldname: feld1 (F4)

call PGM
parm feld1 (name des feldes bei call)

rückgabe im feld1 parameter = "hugo"
nun möchte ich diesen wert "hugo"
inf feld1 anzeigen und übernehmen.

feld1 kann auch feld2 feld2 usw sein(name des Displayfile Feldes)
und jedsmal einen anderen wert haben.

um das ganze nich mit select zu machen, dachte ich an Pointer. liege ich falsch?
für ein kurzes beispiel währe ich dankbar
Gruss an alle

Fuerchau
16-12-05, 19:32
Da Feldnamen zur Compilezeit in Adressen übersetzt werden, können Namen zur Laufzeit nicht dynamisch ermittelt werden.
Du kannst aber z.B. eine Tabelle mit Namen und Adressen initialisieren und diese Adressen dann per Value an das Programm übergeben, so dass diese die Adresse wieder als normale Referenz übernehmen.
Gegen die berühmten Pufferüberschreibungen musst du allerdings selber arbeiten:

d myflds ds
d fldname1 10 inz('NAME1')
d fldadr1 * inz(%addr(NAME1)

usw. usw.

BenderD
17-12-05, 10:02
@Baldur: im Falle von exportierten Feldern kann man den Exportnamen auch zur Laufzeit von einem API gegen den Pointer tauschen lassen. Das ist dieselbe Mimik, die ich in PROCP4NAME verwende (steht als Freeware auf meiner OpenSource Seite).

mfg

Dieter Bender


Da Feldnamen zur Compilezeit in Adressen übersetzt werden, können Namen zur Laufzeit nicht dynamisch ermittelt werden.
Du kannst aber z.B. eine Tabelle mit Namen und Adressen initialisieren und diese Adressen dann per Value an das Programm übergeben, so dass diese die Adresse wieder als normale Referenz übernehmen.
Gegen die berühmten Pufferüberschreibungen musst du allerdings selber arbeiten:

d myflds ds
d fldname1 10 inz('NAME1')
d fldadr1 * inz(%addr(NAME1)

usw. usw.

Fuerchau
17-12-05, 11:51
Dazu müsste ich allerdings aus dem Programm ein Modul machen, die Displayfelder exportieren.
Ich denke, dieser Aufwand lohnt nicht im Verhältnis zur gewünschten Funktion.
Ich würde in diesem Fall tatsächlich ein bisschen Definitionsarbeit machen und dann die Adressen per %lookup ermitteln und übergeben.