[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2006
    Beiträge
    37

    Aufruf Prozedur im Serviceprogramm ohne Prototypdefinition im aufrufenden Programm

    Hallo zusammen,

    ich habe eine Prozedur von einem Copy Bound(per Copystrecke) auf eine Prozedur in eine Serviceprogramm umgestellt.

    In der Copy Bound Version brauchte ich für das Compilieren keinen Prototyp.
    Mit der Version als Serviceprogramm braucht man einen Prototyp.

    Kann man die Definition des Prototyps in RPG irgendwie umgehen(ausser Copystrecke)?

    Im CL mus z. B. auch kein Prototyp angelegt werden. Da holt der CL-Compiler die Daten wohl aus dem Binderverzeichnis.

    Beispiel-CL, beim dem ich nicht dediziert einen Prototyp angebe:

    PGM

    DCLPRCOPT BNDDIR(MYLIB/BDSL)

    DCL &z1$gue *CHAR 1
    DCL &a1$dat *DEC (8 0) VALUE(01012014)
    DCL &r1$d8n *DEC (8 0)
    DCL &r1$d6n *DEC (6 0)
    DCL &r1$tag *CHAR 2
    DCL &r1$mon *CHAR 2
    DCL &r1$jah *CHAR 4
    DCL &r1$wot *DEC (1 0)
    DCL &r1$ttx *CHAR 10
    DCL &r1$rvd *DEC (5 0)

    CALLPRC PRC(#DATUMPRUE) PARM((&A1$DAT) (&R1$D8N) +
    (&R1$D6N) (&R1$TAG) (&R1$MON) (&R1$JAH) +
    (&R1$WOT) (&R1$TTX) (&R1$RVD)) +
    RTNVAL(&Z1$GUE)
    CHGVAR VAR(&A1$DAT) VALUE(32012014)

    CALLPRC PRC(#DATUMPRUE) PARM((&A1$DAT) (&R1$D8N) +
    (&R1$D6N) (&R1$TAG) (&R1$MON) (&R1$JAH) +
    (&R1$WOT) (&R1$TTX) (&R1$RVD)) +
    RTNVAL(&Z1$GUE)

    CHGVAR VAR(&z1$gue) VALUE(&z1$gue)

    ENDPGM



    Beispiel-RPG: Hier ist der Compile nur erfolgreich, wenn ich den Prototyp angebe:

    H ACTGRP('ACTGRPSL') BNDDIR('MYLIB/BDSL')
    *----------------------------------------------------------------
    * DS #ddatprue - Variablen für Datumsroutine
    d#ddatprue ds inz
    d a1$dat 8p 0
    d r1$d8n 8p 0
    d r1$d6n 6p 0
    d r1$tag 2
    d r1$mon 2
    d r1$jah 4
    d r1$wot 1p 0
    d r1$ttx 10
    d r1$rvd 5p 0
    * Datumsprüfung
    d#datumprue pr 1
    d a1$dat 8 0 const
    d r1$d8n 8 0
    d r1$d6n 6 0
    d r1$tag 2
    d r1$tag 2
    d r1$mon 2
    d r1$jah 4
    d r1$wot 1 0
    d r1$ttx 10
    d r1$rvd 5 0
    *================================================= ===============
    * VARIABLEN
    *----------------------------------------------------------------
    d z1rueckgabe s 1
    *================================================= ===============
    * PROGRAMMERÖFFNUNG
    *----------------------------------------------------------------
    * Parameterliste
    *----------------------------------------------------
    * Aufruf Datumsprüfung
    clear #ddatprue;
    a1$dat= 01012014;
    z1rueckgabe = #datumprue(
    a1$dat : r1$d8n : r1$d6n :
    r1$tag : r1$mon : r1$jah :
    r1$wot : r1$ttx : r1$rvd);

    a1$dat = 32012014;
    z1rueckgabe = #datumprue(
    a1$dat : r1$d8n : r1$d6n :
    r1$tag : r1$mon : r1$jah :
    r1$wot : r1$ttx : r1$rvd);
    *inlr = *on;

    Freundliche Grüße
    Stefan

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Für den Aufruf einer Prozedur in einem Service-Programm benötigst Du auf alle Fälle einen Prototypen.

    Erst seit Release 7.1 ist die Definition und Verwendung eines Prototypen für interne Prozeduren optional.

    Übrigens der Befehl CALLP, der im RPG-Free-Format optional ist, steht für "CALL WITH PROTOTYPE".

    Mit Hilfe der Prototypen werden die Parameter-Definitionen zu Compile-Zeit geprüft. Stimmen die Parameter-Definitionen nicht überein wird das Programm oder Modul erst gar nicht erstellt. Im Gegensatz zum CL. Hier werden Abweichungen zwischen den Parameter-Definitionen nicht vor der Laufzeit festgestellt.

    Birgitta
    Birgitta Hauser

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

  3. #3
    Registriert seit
    Jan 2006
    Beiträge
    37
    Hi Brigitta,

    Danke für die schnelle Antwort.

    Gruß
    Stefan

Similar Threads

  1. aufruf von qstrup
    By rr2001 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 27-05-14, 13:44
  2. hinzufügen Prozedur in bestehendes Serviceprogramm
    By Tonazzo in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 11-03-14, 09:26
  3. SQL Funktion ruft Serviceprogramm auf - Parameter übergabe
    By loisl in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 08-11-13, 16:37
  4. Aufruf einer PC Anzeige von der AS/400 aus
    By it-wolf in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 19-07-02, 16:27
  5. Frage zu RPG: Aufruf RPG-Programm mit Parametern
    By hs in forum IBM i Hauptforum
    Antworten: 14
    Letzter Beitrag: 09-10-01, 12:06

Tags for this Thread

Berechtigungen

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