Anmelden

View Full Version : Pointer ins Nirwana nach Proc Aufruf???



AndreasH
20-09-02, 13:47
Ich habe ein Modul mit einer Procedure.
Diese Proc soll den Inhalt einer Datenstruktur ermitteln und den Pointer auf diese DS an das Hauptprogramm zurückgeben.
Wenn der pointer an das Hauptprogramm zurückgegeben wird weisst er ins Nirwana.
Was mache ich falsch???
Ach ja: die Proc ist direkt mit ADDBNDDIRE in mein Bindeverzeichnis eingestellt.

Sieht in etwa so aus:

Main Programm:

D Proc PR *
D 18A VALUE
D 10S 0 VALUE
D 3A OPTIONS(*OMIT)

D DS DS based(Ptr_DS)
D Anzahl 5S 0
D Matn 18A 0 DIM(50)
D Menge 8S 0 DIM(50)

C eval Ptr_DS = Proc(Feld1:Feld2)

.. Der inhalt der DS ist nach dem Aufruf Schrott
*********

Procedure:
Prototyp wie oben...
H Nomain
P P#CHK_BEST B EXPORT
D PI *
D E#MATN 18A VALUE
D E#MNG_POS 10S 0 VALUE
D I#MAND 3A OPTIONS(*OMIT)

D DS DS INZ
D Anzahl 5S 0
D Matn 18A 0 DIM(50)
D Menge 8S 0 DIM(50)

D Ptr_DS S *

C Eval Matn(1) = '4711'
C Eval Meng(1) = 1
C Eval Ptr_DS = %ADDR(DS)
C Return Ptr_DS
P E

rmittag
21-09-02, 10:18
<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>
Wenn der pointer an das Hauptprogramm zurückgegeben wird weisst er ins Nirwana.
[/quote]
wohin denn sonst ? die Prozedur ist ja beendet, oder?

Gruß
Rolf

BenderD
21-09-02, 11:48
Hallo,
erst mal eine Anmerkung zur Frage:
wenn irgendwas nicht tut, dann ist es sinnvoll den Original Code anzugeben und nicht den Ungefähren, oder keinen. Das erhöht die Antwortquote.

Um Rolfs frotzelige Antwort zu erläutern: der zurück gegebene Pointer darf nicht auf lokalen Speicher der Prozedur verweisen und es steht zu vermuten, dass er das tut. Alle lokalen Deklarationen einer Prozedur werden mit automatic storage hinterlegt, der nach Beendigung der Prozedur weg ist. Wenn er global deklariert wird, dann sollte dieses Problem weg sein, solange kein RCLACTGRP oder ACTGRP(*NEW) im Spiel ist.

Dieter


<BLOCKQUOTE><font size="1" face="Verdana, Arial">Zitat:</font><HR>Original erstellt von rmittag:


Wenn der pointer an das Hauptprogramm zurückgegeben wird weisst er ins Nirwana.

wohin denn sonst ? die Prozedur ist ja beendet, oder?

Gruß
Rolf[/QUOTE]

rmittag
21-09-02, 12:19
hi Dieter,
just couldn't resist ...

http://www.as400-forum.de/ubb/wink.gif

Rolf

AndreasH
22-09-02, 11:00
Hallo Dieter und Rolf,
danke für die Antworten.
Gruß
Andreas