[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hallo,
    Für genau diese Situation gibt es in RPG ab 7.1 das Schlüsselwort RTNPARM bei der Procedurdefinition:
    Code:
    D getFileData     pr    a     varying len(1000000)
    D                             rtnparm
    D file                  a     const varying len(500)
    
    /free
      data = getFileData ('/home/mydir/myfile.txt');

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.945
    ... aber Vorsicht!
    Der Aufruf mit Rückgabe-Wert funktioniert nur beim Aufruf aus RPG.
    Beim Aufruf aus anderen Programmiersprachen muss der Rückgabe-Wert über den ersten Parameter abgehandelt werden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.808
    Das Problem mit dem Speicher beginnt ja schon beim Übergabeparameter.
    Wenn dieser CONST ist, legt der Compiler ja automatisch eine Kopie in der Größe an.
    Aber ohne CONST kann ich keine dynamische Übergabe kodieren:
    MyFunc(Var1);
    MyFunc('Text');
    Problematisch wirds dann noch bei Rekursion und geschachtelten Funktionen.
    Bifs sind intern wohl etwas anders kodiert.

    Dynamisch geht es eigentlich nur per Pointer.
    Allerdings muss die Aufrufkonvention genau eingehalten werden.

    Beschränke dich doch einfach auf max. 32K-Variablen, das reicht in 99,999% aller Fälle.
    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

  4. #4
    Registriert seit
    Aug 2001
    Beiträge
    2.945
    Bei VALUE wir immer eine Kopie erstellt.
    Bei CONST nur dann, wenn die Parameter-Definition (Aufruf/Prototyp) abweichend ist. Es wird immer ein Pointer (entweder auf das Original-Feld oder die Kopie übergeben.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.808
    CONST erzwingt ebenso eine Kopie, damit die aufgerufene Funktion den Speicher nicht ändern kann.
    Dies ist Sinn und Zweck von CONST.
    VALUE arbeitet (fast) genauso, nur dass scalare Datentypen nicht kopiert werden sondern direkt im Stack abgelegt werden (CLLE-Problem).
    Bei Zeichenvariablen wird der Inhalt kopiert und ein Pointer im Stack abgelegt.
    Die Kopie benötigt dann halt den Platz.
    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

Similar Threads

  1. Foxtrot erledigt Datawarehouse/MIS Funktionen
    By Dick Dekker in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 14-01-03, 15:14
  2. Antworten: 0
    Letzter Beitrag: 04-07-02, 07:31

Tags for this Thread

Berechtigungen

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