-
Rückgabewert Pointer
Moin moin,
diesmal hab ich zwar kein Problem, aber ich könnte mal eure Erfahrung gebrauchen.
Ich habe einen Service gebaut, der ein ankommendes XML in eine DS packt und diese dann zurück an ein Programm geben soll.
Ich habe mri nun überlegt, ich gebe einfach einen Pointer zurück und addiere dort dann (um auf den nächsten Eintrag in der DS zu kommen) die Länge der DS auf.....
Gibt es etwas was dagegen spricht, oder vielleicht eine bessere Idee?
Gruß
Joe
-
Wichtig ist natürlich, dass du hier auf statischen, also globalen Speicher zugreifst und dein Service im Speicher aktiv bleibt.
Ansonsten zeigt dein Pointer irgendwohin nur nicht auf deine Daten.
Du kannst natürlich auch per %alloc() Speicher anlegen, allerdings muss der Caller auch dafür sorgen, dass dieser wieder freigegeben wird.
Pointer Programmübergreifend zu verwenden stellt sich immer als Risiko dar, wenn man Pointer holt.
Pointer weiterzugeben, also nach unten per Call, ist ja das normalste der Welt.
Was deinen Service angeht so sollte dieser nicht per Pointer die Daten zurückgeben sondern eine DS als Ergebnis liefern, ggf. per Reference-Parameter.
Der Returnwert sagt dann was darüber aus, ob weitere Daten vorliegen oder nicht (wie %eof() beim READ).
-
Wenn Du Dich zum Lesen von XML des XML-SAX bedienst, dann bietet es sich an, das analog wie der zu tun:
* Du übergibst dem Serviceprogramm die Adresse des zu füllenden Speicherbereichs in Deinem Programm.
* Und die Adresse einer Routine, die beim Erreichen des Endes des umschließenden Elements aufzurufen ist. ("Callback")
Damit kannst Du auch Millionen von "XML-Records" verarbeiten.
Und auch sonst ist es einfacher, zuerst Speicher zu definieren und die Adresse einem Serviceprogramm zu übergeben als umgekehrt. Vor allem, wenn Du offenbar ganz genau weißt, wie viel Platz Du brauchst.
-
Zitat von AG1965_2
* Und die Adresse einer Routine, die beim Erreichen des Endes des umschließenden Elements aufzurufen ist. ("Callback")
Damit kannst Du auch Millionen von "XML-Records" verarbeiten.
Und auch sonst ist es einfacher, zuerst Speicher zu definieren und die Adresse einem Serviceprogramm zu übergeben als umgekehrt. Vor allem, wenn Du offenbar ganz genau weißt, wie viel Platz Du brauchst.
Naja, letztendlich weiß ich nicht, wieviel Platz ich benötige.
Wie meinst du das mit dem Callback?
-
Du definierst eine Prozedur mit Übergabeparameter z.B. der DS.
Deiner Serviceprozedur übergibst du einen Prozedurpointer.
Diese bearbeitet deine XML und ruft je "Datensatz" über den Prozedurpointer wieder das rufende Programm.
Dies nennt man CALLBACK.
Somit benötigst du keinen endlosen Speicher.
Das ist i.Ü. das selbe Prinzip wie die XML-Schnittstelle. Die ruft auch über Callbacks deine diversen Prozeduren auf.
Similar Threads
-
By AndreasH in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 22-09-02, 11:00
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