-
Danke für die Antwort.
Habe mich nun ein wenig damit "gespielt" und folgendes probiert:
Das scheint zu funktionieren:
DCL VAR(&In_Parm) TYPE(*CHAR) LEN(10)
DCL VAR(&Work_Parm) TYPE(*CHAR) LEN(10)
DCL VAR(&nullptr) TYPE(*PTR)
IF COND(%ADDR(&In_Parm) *NE &NULLPTR) THEN(DO)
chgvar var(&Work_Parm) value(&In_Parm)
enddo
CALL PGM(PGM01) PARM(&Work_Parm)
Ich prüfe da einfach mit hilfe von %ADDR ab ob der Input-Parm eine Adresse enthält.
Ist das ein gangbarer Weg?
LG
-
Wenn du dem "Hoppla"-link folgst, siehst du dass das auch nicht funktioniert.
Es können wohl noch Reste im Stack rumliegen.
Solange es in CLP keine Möglichkeit gibt, die Anzahl der Parameter abzufragen solltest du die vorgeschlagene Wrapperfunktion in ILERPG verwenden.
Man kann auch ein CLP mit den Parametern machen, dann gibts schon beim Aufruf einen Parameterfehler und dann per TFRCTL das eigentliche CLLE-Programm starten.
-
Hallo Fuerchau,
den Link habe ich mir schon angesehen.
Allerdings ist, soweit ich das sehen konnte, diese Info vom Jahr 2004.
Ich rufe mein CL Programm nicht mit einem RPGLE auf sondern auch mit einem CL Programm.
Sprich CL1 ruft CL2 auf und im CL2 wird diese Prüfung gemacht.
Ich habe mir das mit den Parametern angesehen und es auch getestet.
Rufe im CL1 das CL2 im 1. Lauf mit 10 Parametern auf, gleich darauf mit 11 Parms, danach gleich wieder mit 10 Parms. Also CL1 wird zwischendurch nicht geschlossen.
Es äußert sich so als ob beim 3. Aufruf der 11 Parm gar nicht vorhanden wäre und somit meine Prüfung korrekt abgehandelt wird.
Ich konnte hier keine falschen Werte bzw. noch gefüllte Parameter feststellen.
Bekomme beim 3. Lauf dann wiederrum (im Debug) die Fehlermeldung "Domänenverletzung" wenn ich den Feldinhalt ansehen will.
Ob dies mit dem RPGLE auch so funzt weiß ich noch nicht. Werde ich ggf. mal testen.
Hier dürfte die V7 dies dann doch schon besser händeln.
Greats
-
Domänenverletzung deutet ja auf einen stehen gebliebenen Pointer hin, der halt (meistens) der Systemdomäne gehört an die ein User-Programm (der Normalfall) eben nicht dran darf.
Ansonsten käme ein InvalidPointer.
Das ist ja genau das Problem mit variablen Aufruflisten wenn man die Anzahl der Parameter nicht abfragt bzw. halt nicht abfragen kann.
In ILERPG kann ich das num mal mit %parms() sicherstellen.
Parameter, die zwischendrin fehlen dürfen, benötigen dann einen NULL-Pointer.
In CLLE würde ich mich auf solche Spielchen nicht einlassen.
Wenn du unbedingt variable Aufrufparameter haben musst, ggf. auch als Returnwert, dann empfehle ich die Entwicklung eines CMD's.
Optionale Parameter bekommen einen Default, nicht angegebene optionale Returnwerte bekommen einen NULL-Pointer.
Die Anzahl der Parameter ist immer identisch und man kann sich darauf verlassen.
Man kann jederzeit das Kommando und das CLLE anpassen ohne dass andere Programme ggf. von zusätzlich Parametern etwas merken.
Deine Methodik mit MONMSG/%ADDR ist dafür prädestiniert, Fehler zu generieren die dann kein Mensch mehr findet.
Außerdem handelst du dir ja auch noch Typfehler ein, da ein CLP/CLLE immer mit Call-By-Reference aufgerufen wird. Call-By-Value (ILERPG/COBOL/C) gibt es dafür nicht.
Die Probleme mit den falschen Längen bei den Aufrufen sind ja nun mal hinreichend bekannt.
-
Guten Morgen Fuerchau,
Danke für die Aufklärung!
Nun ist mir einiges klarer.
Thx
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