Wenn das hier ein Anfänger liest, wird er wenig bis nix kapieren, es ist aber gerade für Anfänger wichtig.
in meinen Augen gibt es nur einen korrekten Weg, wenn man Werte übergeben will und diese in einer Prozedur ändern will und anschließend mit diesen geänderten Werten weiterarbeiten will.
Man packe alles in eine Struktur, definiere eine Variable und übergebe diese an eine Prozedur
Abgesehen davon ist dies doch ein altes Thema, die Rückgabe eines Zeigers mit ProcedureReturn der auf eine Variable zeigt, welche in der Prozedur definiert wird, ist Unsinn und wie TSSOFT sagte verboten. Und zwar weil lokale Variablen nach verlassen der Prozedur früher oder später gelöscht bzw. überschrieben werden und der Zeiger dann auf sonstwas zeigt.
Ausser man macht es wie TSSOFT und erklärt diese Variable als Static, nur ist das nicht besonders flexibel.
Hier mal BATZE seinen Beitrag etwas ausführlicher
Code: Alles auswählen
Declare Return4Values(*tVar, x)
Declare Return4Values2(*tVar, x)
Declare Return4Values3(*tVar, *tVar2, x)
Declare Return4Values4(*tvar, x$)
Structure MyStruct
Val1.l
Val2.l
Val3.d
Val4.d
EndStructure
;----------------------------------
With Test.MyStruct
\Val1 = 1233
\Val2 = 124124
\Val3 = 1212.213123
\Val4 = 1233.123321
Return4Values(Test, 2)
EndWith
Debug Test\Val1
Debug Test\Val2
Debug Test\Val3
Debug Test\Val4
;oder mit festen Werten in der Prozedur
Return4Values2(Test2.MyStruct, 3)
Debug Test2\Val1
Debug Test2\Val2
Debug Test2\Val3
Debug Test2\Val4
;Noch eine Variante mit einer bzw. mehreren Variablen
Return4Values3(@Test3.l, @Test4.d, 3)
Debug Test3
Debug Test4
;oder mit variablen Strings, es geht aber nur so
;also nicht mit Test5$ oder Test5.s
Return4Values4(Test5.String, "dreifacher")
Debug Test5\s
End
;-----------------------------------------
Procedure Return4Values(*t.MyStruct, x)
With *t
\Val1 * x
\Val2 * x
\Val3 * x
\Val4 * x
EndWith
EndProcedure
Procedure Return4Values2(*t.MyStruct, x)
With *t
\Val1 = x * 1233
\Val2 = x * 124124
\Val3 = x * 1212.213123
\Val4 = x * 1233.123321
EndWith
EndProcedure
Procedure Return4Values3(*v1.long, *v4.double, x)
*v1\l = x * 1233
*v4\d = x * 1233.123321
EndProcedure
Procedure Return4Values4(*v1.string, x$)
*v1\s = "Hallo, du " + x$ + " Meuchelmörder"
EndProcedure