[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    May 2013
    Beiträge
    9

    Pointerübergabe an Serviceprogramm

    Hallo zusammen,

    ich habe eine Frage zur Übergabe von Pointern an ein SRVPGM.

    Folgende Konstellation:

    1) Funktion1 aus einem Serviceprogramm liefert einen Pointer zurück, der auf ein 3-stellige Alpha Feld zeigt.

    2) Funktion2, welches sich in dem selben Serviceprogramm wie Funktion1 befindet, bekommt den Pointer als Inputparameter.

    3) In der Implementierung der Funktion2 soll der Pointer wieder dereferenziert werden und mir den Inhalt des 3-stelligen Feldes liefern.

    Schaue ich mir den Inhalt des Inputparameters im Debug in der Funktion2 an steht dort die richtige Adresse. Jedoch wird mir bei der Dereferenzierung nicht der Inhalt des Feldes zurückgegeben, sondern nur Blanks bzw. das Programm sagt "Inhalt nicht verfügbar".

    Wenn ich die Dereferenzierung im Programm durchführe, das beide Funktionen aufruft, kann ich den Inhalt ohne Probleme auslesen.

    Warum klappt dies nicht bei der Dereferenzierung im SRVPGM? Oder ist das so generell nicht möglich?

    Vielen Dank für eure Hilfe!

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Generell ist das möglich, sollte aber aus Sicherheitsgründen nicht so gemacht werden.

    Wenn du einen Pointer an eine Funktion übergibst, so sollte sie als "value" übergeben werden, da du sonst die Adresse des Pointers bekommst.

    Schau dir deine Definitionen genau an!

    Eine Funktion darf keine Adresse aus seinem lokalen Speicher zurückgeben, da nach Return die Adresse nicht mehr gültig ist. Dies ist nur mit globalen (bzw. Static) Variablen möglich.

    Gutes Design ist das nicht, da du dann von außerhalb Inhalte verändern oder zerstören kannst.

    Ein Pointer zeigt nur auf eine Adresse, was dahinter gespeichert ist, kann allenfalls MCH-Fehler auslösen. und zeigt ansonsten Unsinn.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    May 2013
    Beiträge
    9

    Unhappy

    Das ist mir durchaus bewusst, jedoch vom Auftraggeber so gewünscht.

    Der Auftraggeber versucht durch das Übergeben von Pointern dem Aufrufer zu verschleiern, um was für Felder es sich handelt, um das Feld oder die DS als "RPG-Objekt" zu behandeln.

    Wenn die lokale Adresse nach Return nicht mehr gültig ist, warum kann ich dann im aufrufenden Programm nach dem Return darauf zugreifen?

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.695
    Weil dann der Adress-Bereich wieder neu belegt wird.
    Lokale Variablen einer Funktion liegen im Stack.

    Die bessere Alternative ist, eine Variable zu exportieren, auf die dann per Import zugegriffen werden kann.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    ... normalerweise helfe ich ja nicht krummes Design zu implemetieren...
    aber wenn man es richtig macht, geht das:
    in jedem Fall die Variable im static storage anlegen (am einfachsten global im Modul)
    Variante a)
    Übergabe der Variable(!!!) per Reference (dann braucht es keine Referenzierung/Dereferenzierung und auch keine explizite Rückgabe)
    Variante b)
    Übergabe des Pointers by Value

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    May 2013
    Beiträge
    9
    Hat geklappt!

    Vielen Dank

Similar Threads

  1. Verwendung einer MSGF im Serviceprogramm
    By claudia_669 in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 10-07-12, 08:11
  2. JSON Serviceprogramm
    By mihael in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 13-03-09, 13:23
  3. Fehler bei Prozedur in Serviceprogramm
    By Hubert in forum NEWSboard Programmierung
    Antworten: 9
    Letzter Beitrag: 16-11-07, 08:44
  4. Serviceprogramm QC3CTX???
    By jo400 in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 17-11-06, 13:21
  5. Displayfile Pointerübergabe
    By THH in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 17-12-05, 11:51

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •