Enthält *Schüler nach dem Aufruf der Prozedur den neuen Node (Speicheradresse) oder nicht???
Diese Pointer machen mich echt fertig!
Code: Alles auswählen
Procedure XMLSchuelerNode(*MainNode, Sid.l, *pSchueler.Integer)
Protected *Schueler
If *MainNode
*Schueler = XMLNodeFromPath(*MainNode, "Schueler")
While *Schueler <> 0
If GetXMLAttribute(*Schueler, "sid") = Str(Sid)
*pSchueler\i = *Schueler
ProcedureReturn #True
EndIf
*Schueler = NextXMLNode(*Schueler)
Wend
EndIf
ProcedureReturn #False
EndProcedure
;Der Aufruf ist dann wie folgt:
Define *Schueler = 0 ;<--- Inhalt soll sich ändern und ist aktuell 0
If XMLSchuelerNode(*MainNode, 123, @*Schueler) ;Wichtig ist das @ vor *Schueler, damit wir den Pointer zum Pointerinhalt kriegen
;Der Schüler wurde gefunden und der Wert von *Schueler geändert:
Debug *Schueler
Else
;Der Schüeler wurde nicht gefunden und *Schueler ist immer noch 0
Debug *Schueler
EndIf

Das glaube ich inzwischen auch.ts-soft hat geschrieben:NicTheQuick hat natürlich recht, aber es spricht nichts dagegen *Schueler als ProcedureReturn zurückzugeben.
In diesem Fall sicher das einfachste.
Code: Alles auswählen
Procedure a()
Protected c = 1000
ProcedureReturn @c
EndProcedure
Procedure b()
Static c = 1000
ProcedureReturn @c
EndProcedure
Debug PeekI(a())
Debug PeekI(b())