[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Oct 2015
    Beiträge
    109

    Unhappy Prozeduraufruf in Serviceprogramm durch externes Programm

    Guten Tag zusammen,

    ich versuche aus einem Programm "PAR801" eine Prozedur eines Serviceprogramms
    "PAR999" anzusprechen, bekomme jedoch beim Wandeln von "PAR801" folgende
    Fehlernachricht:
    " Objekt QZDMMDTA der Art *SRVPGM in Bibliothek QSOC nicht gefunden. Definition für Symbol 'pr_art800' nicht gefunden."

    PAR999 ist als Modul und dann als Serviceprogramm gewandelt.
    Ich habe ein Binderverzeichnis "PAR999_BND" erstellt mit Modul "PAR999".

    BNDDIR Eintrag in PAR801:
    Code:
     H Bnddir('PAR999_BND')
    Prototyp im PAR801:
    Code:
         D test            PR              *   extproc('pr_art800')                                             
         D  Firma                        10I 0 value                                                            
         D  Artnr                        10I 0 value                                                            
         Dgetlabz          S               *
    Der Aufruf in PAR801:
    Code:
      
    firm = 1;                                                                                     
    arte = 278442;                                                                                 
    getlabz = test(firm:arte);                                                                   
    labz = %str(%addr(getlabz));
    Prozedurdefinition in PAR999:
    Code:
           dcl-proc pr_art800 export ;
         D pr_art800       PI              *
         D FIRMA                         10I 0
         D ARTNR                         10I 0
         d LABZ            S               *   inz
    weiß jmd Rat, weshalb die Prozedur nicht gefunden wird?

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Schau dir per DSPSRVPGM die Exporte an und achte auf die Groß/Kleinschreibung.
    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
    Oct 2015
    Beiträge
    109
    Hallo nochmal,

    habe den Fehler lokalisiert:
    " D test PR * extproc('pr_art800')"
    muss einfach groß geschrieben werden:
    " D test PR * extproc('PR_ART800')"

    Leider funktioniert meine Parameterübergabe nicht

  4. #4
    Registriert seit
    Oct 2015
    Beiträge
    109
    Dankeschön Fuerchau,
    hab den Groß-/Kleinschreibungsfehler entdeckt

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Mit der Parameterübergabe kann dir keiner helfen. Hier benötigst du eine Schnittstellenbeschreibung.
    Anzahl und Typ der Parameter lässt sich leider nicht abfragen. Pauschal kann man nur sagen, es sind bis 400 Parameter erlaubt. D.h., man kann durchaus mehr Parameter übergeben als nötig, die werden halt ignoriert, aber selten weniger.
    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

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Ist Dir aufgefallen, dass die Prozedur-Definitionen unterschiedlich sind?
    In der einen Defintion werden die Parameter-Felder by VALUE übergeben und in der anderen Defintion By Reference.
    Defintionen sollten schon identisch sein .

    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

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Stimmt, habe ich übersehen.
    Auch bzgl. des Returnwertes solltest du ggf. keinen Pointer (%ADDR) zurückgeben sondern direkt ein Zeichenfeld, ggf. auch mit VARYING.
    Auch weiß ich nicht, was dir "%str(%addr(getlabz))" liefern soll.
    "getlabz" muss ein Pointer sein da deine Prozedur einen zurückgibt.
    %addr liefert dir nun die Adresse des Pointers im Speicher.
    %str versucht nun davon einen Nul-terminerten String zu laden.
    Korrekt wäre da eher "%str(test(p12))", wenn der Return deiner Funktion auch einen C-String liefert.

    Besser und übersichtlicher sind allemal native RPGLE-Variablen. Pointer sind eher was für API's.
    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

  8. #8
    Registriert seit
    Oct 2015
    Beiträge
    109
    Dankeschön!
    Habs inzwischen wie vorgeschlagen gelöst.
    Ich gebe direkt das Char Feld zurück.
    Das funktioniert jetzt einwandfrei.

    Eine letzte Frage habe ich noch.
    In meinem Serviceprogramm habe ich jetzt eine Datei eingebunden,
    im Aufrufprogramm jedoch nicht.
    Muss ich das Aufrufprogramm noch einmal wandeln, wenn die Datei erweitert wird?

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Nein, wieso?
    Ein Levelcheck passiert nur beim Open und den macht ja das Service-Pgm.
    Nun rate mal, wer neu umgewandelt werden muss...
    Wenn du allerdings eine E_DS definierst und diese Struktur als Parameter austauschst, ist natürlich jeder der das verwendet betroffen.
    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

  10. #10
    Registriert seit
    Oct 2015
    Beiträge
    109
    Ja super,
    das hatte ich mir auch überlegt.
    Lag wahrscheinlich nur daran, dass ich noch auf das alte Objekt zugegriffen habe?
    Dankeschön!

Similar Threads

  1. Serviceprogramm und Speicher
    By Tonazzo in forum NEWSboard Programmierung
    Antworten: 29
    Letzter Beitrag: 15-09-15, 15:03
  2. CLLE als Prozedur ins Serviceprogramm
    By Etherion in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 30-09-14, 14:36
  3. Antworten: 2
    Letzter Beitrag: 12-08-14, 13:09
  4. OPNQRYF im RPG-Programm durch SQL ersetzen
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 18-05-14, 17:26
  5. LTO externes Bandlaufwerk
    By Dana in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 03-05-02, 17:14

Berechtigungen

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