-
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?
-
Schau dir per DSPSRVPGM die Exporte an und achte auf die Groß/Kleinschreibung.
-
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
-
Dankeschön Fuerchau,
hab den Groß-/Kleinschreibungsfehler entdeckt
-
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.
-
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
-
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.
-
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?
-
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.
-
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
-
By Tonazzo in forum NEWSboard Programmierung
Antworten: 29
Letzter Beitrag: 15-09-15, 14:03
-
By Etherion in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 30-09-14, 13:36
-
By Etherion in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 12-08-14, 12:09
-
By dschroeder in forum NEWSboard Programmierung
Antworten: 13
Letzter Beitrag: 18-05-14, 16:26
-
By Dana in forum IBM i Hauptforum
Antworten: 2
Letzter Beitrag: 03-05-02, 16:14
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks