[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jul 2002
    Beiträge
    331

    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

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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).
    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 2013
    Beiträge
    171
    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.

  4. #4
    Registriert seit
    Jul 2002
    Beiträge
    331
    Zitat Zitat von AG1965_2 Beitrag anzeigen
    * 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?

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    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.
    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

Similar Threads

  1. Pointer ins Nirwana nach Proc Aufruf???
    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
  •