-
Funktion mit variabler länge
So würde ich das gerne machen, nur so funktioniert das leider nicht.
Weiss jemande wie man das lösen könnte?
PHP-Code:
D UpperCase B D UpperCase PI 32766A options(*varsize) // <-- das will er nicht D string 32766A options(*varsize) D lower C Const('abcd...') D upper C Const('ABCD...') /free return %xlate( lower: upper: string); /end-free D UpperCase E
-
probiers mal damit
D UpperCase B
D UpperCase PI 32766A varying
D string 32766A value varying
D lower C Const('abcd...')
D upper C Const('ABCD...')
/free
return %xlate( lower: upper: string);
/end-free
D UpperCase E
-
Hab noch was herausgefunden, der Rückgabewert Funktioniert, nur der Input nicht, wenn ich die funktion z.B. so aufrufe: UpperCase('n'); steht in der Variablen "String" = 'n' und danach jede Menge Speichermüll und das ist das Problem.
-
Zitat von Xanas
Hab noch was herausgefunden, der Rückgabewert Funktioniert, nur der Input nicht, wenn ich die funktion z.B. so aufrufe: UpperCase('n'); steht in der Variablen "String" = 'n' und danach jede Menge Speichermüll und das ist das Problem.
Diesen Speicher-Müll würde ich allerdings nicht überschreiben! Das gibt ganz böse Überraschungen.
Ohne die Angabe der Schlüssel-Wörter CONST oder VALUE wird die Adresse des Parameter-Feldes an die aufgerufene Prozedur übergeben.
Wird das Schlüssel-Wort VALUE verwendet, wird ein Duplikat des Parameter-Feldes mit der vom aufgerufenen Programm erwarteten Feld-Definition erstellt (vorausgesetzt die Datentypen sind compatibel, ansonsten ist die Kompilierung nicht erfolgreich). Dieses Duplikat wird an das aufgerufene Programm übergeben.
Wird das Schlüssel-Wort CONST verwendet wird ein temporäres Feld mit der Definition des erwarteten Parameters erstellt und mit dem Parameter-Wert inititalisiert, sofern die Feld-Definitionen abweichen. Anschließend wird die Adresse des temporären Feldes an die aufgerufene Prozedur übergeben.
Gibt es keine Abweichung wird die Adresse des Original-Feldes an die rufende Prozedur übergeben.
Wird keines der beiden Schlüssel-Worte angegeben, wird die Adresse des Parameter-Feldes an die rufende Prozedur übergeben. Der Compiler vergleicht die Definition im Prototyp. Stimmt die Definition nicht überein, wird das Programm oder die Prozedur nicht erstellt, es sei den man gibt bei alphanumerischen Feldern das Schlüssel-Wort OPTION(*VARSIZE) an.
Damit man keine bösen Überraschungen überlebt, muss man in der aufgerufenen Prozedur die Anzahl der übergebenen Byte abfragen und dafür sorgen, dass nur diese Anzahl Bytes verarbeitet wird. Ein CLEAR auf das Parameter-Feld in der aufgerufenen wird u.U. globalen Speicher überschreiben! (und an einer völlig anderen Stelle aufs Butter-Ende schlagen!)
Um die Anzahl der übergebenen Bytes prüfen zu können, muss im Prototyp in der PR-Zeile das Schlüssel-Wort OpDesc angegeben werden. Dann kann durch den Aufruf des APIs CEEDOD die Anzahl der übergebenen Bytes pro Parameter ermittelt werden.
Bei Feldern mit variablen Länge werden dem eigentlichen Feld 2 Byte vorangestellt in denen automatisch die Anzahl der verwendeten Bytes gespeichert wird. Diese beiden Byte werden vom Programm ausgelesen und nur die Anzahl der Byte verarbeitet, die in diesen beiden Byte gespeichert ist verarbeitet. Bei Feldern mit variabler Länge werden die folgenden Zeichen nicht durch Blanks oder x'00' oder was auch immer überschrieben.
Der Rückgabe-Wert wird automatisch korrekt aufbereitet und zurückgegeben.
Birgitta
-
Zitat von B.Hauser
Um die Anzahl der übergebenen Bytes prüfen zu können, muss im Prototyp in der PR-Zeile das Schlüssel-Wort OpDesc angegeben werden. Dann kann durch den Aufruf des APIs CEEDOD die Anzahl der übergebenen Bytes pro Parameter ermittelt werden.
Danke das hatte ich schon mal sogebaut, hatte aber auch nicht funktioniert, weil ich die Funktionsweise des API's nicht geschnallt hatte.
Xanas
Similar Threads
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 13-11-06, 07:31
-
By Marsman in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 27-09-06, 12:32
-
By steven_r in forum NEWSboard Programmierung
Antworten: 1
Letzter Beitrag: 01-06-06, 12:16
-
By harkne in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 19-12-05, 17:46
-
By holly in forum NEWSboard Programmierung
Antworten: 6
Letzter Beitrag: 07-12-04, 13:23
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