String ByReference an Procedure übergeben
Verfasst: 08.04.2010 17:56
Hallo!
Hoffe es kann mir jemand erklären wie ich einen String ByReference an eine Prozedur übergeben kann - ich möchte einfach den geänderten String dann nach der Rückkehr aus der Prozedur in der Originalen Variable haben (und eben kein ProcedureReturn dafür verwenden).
Meine Versucht über Pointer das gewünschte zu erreichen scheitern leider alle - auch nach Lektüre von http://forums.purebasic.com/german/view ... p?p=247032 bin ich nicht wirklich schlauer.
Hier mein kleines Beispiel:
Der in der Prozedur geänderte String ist auch nach dem Ende der Prozedur schön über "*TestString2\s" ansprechbar - aber wie kriege ich den dann wieder in sText rein? Man sieht im Debugger dass die Speicherverwaltung die Stringadresse verändert weil der String länger wird... daher klappts am Ende mit sText dann nicht mehr. Hoffe es hat da jemand eine Idee dazu.
Meine erst Idee war eigentlich die hier:
Aber auch wenn es mir irgendwie einfacher erscheinen würde die Variablenadresse einfach mit "@Variablenname" an die Prozedur zu übergeben - so funktioniert es leider überhaupt nicht: "Ungültiger Speicherzugriff" in der Prozedur 
Kann zwar die Prozedur etwas verändern
und kriege dann keinen ungültigen Speicherzugriff mehr - aber nach der Rückkehr aus Prozedur befindet sich trotzdem nur Müll in sText....
Wie gehts richtig? Stehe da irgendwie auf der Leitung!
Danke!
Hoffe es kann mir jemand erklären wie ich einen String ByReference an eine Prozedur übergeben kann - ich möchte einfach den geänderten String dann nach der Rückkehr aus der Prozedur in der Originalen Variable haben (und eben kein ProcedureReturn dafür verwenden).
Meine Versucht über Pointer das gewünschte zu erreichen scheitern leider alle - auch nach Lektüre von http://forums.purebasic.com/german/view ... p?p=247032 bin ich nicht wirklich schlauer.
Hier mein kleines Beispiel:
Code: Alles auswählen
Procedure test_str(*sTest.String)
Debug "P-Adresse Proc1: >"+Str(*sTest)+"<"
Debug "P-Adresse Proc2: >"+Str(@*sTest\s)+"<"
Debug "P-TEST:"+ *sTest\s
*sTest\s="TEST225555555555555555555555555555555552"
Debug "P-Adresse Proc1: >"+Str(*sTest)+"<"
Debug "P-Adresse Proc2: >"+Str(@*sTest\s)+"<"
Debug "P-TEST2:"+ *sTest\s
EndProcedure
sText.s
*Text = @sText
*TestString2.String=@*Text
Debug "TEST_STR Anfang: >"+*TestString2\s+"<"
Debug "Adresse: >"+Str(*TestString2)+"<"
Debug "Adresse 2: >"+Str(@*TestString2\s)+"<"
*TestString2\s="123456789"
Debug ""
Debug "TEST_STR Mitte: >"+*TestString2\s+"<"
Debug "Adresse: >"+Str(*TestString2)+"<"
Debug "Adresse 2: >"+Str(@*TestString2\s)+"<"
Debug ""
Debug "Prozedur"
test_str(*TestString2)
Debug "Prozedur Ende"
Debug ""
Debug "TEST_STR Ende: >"+*TestString2\s+"<"
Debug "Adresse: >"+Str(*TestString2)+"<"
Debug "Adresse 2: >"+Str(@*TestString2\s)+"<"
Debug ""
Debug "TEST_STR2 GANZ Ende: >"+sText+"<"
Debug "Adresse: >"+Str(@sText)+"<"
Meine erst Idee war eigentlich die hier:
Code: Alles auswählen
Procedure test_str(*sTest.String)
Debug "P-Adresse Proc1: >"+Str(*sTest)+"<"
Debug "P-Adresse Proc2: >"+Str(@*sTest\s)+"<"
Debug "P-TEST:"+ *sTest\s
*sTest\s="TEST225555555555555555555555555555555552"
Debug "P-Adresse Proc1: >"+Str(*sTest)+"<"
Debug "P-Adresse Proc2: >"+Str(@*sTest\s)+"<"
Debug "P-TEST2:"+ *sTest\s
EndProcedure
sText.s
*Text = @sText
*TestString2.String=@*Text
Debug "TEST_STR Anfang: >"+sText+"<"
Debug "Adresse: >"+Str(@sText)+"<"
*Text=@sText
Debug "Adresse 2: >"+Str(@*Text)+"<"
sText="123456789"
Debug ""
Debug "TEST_STR Mitte: >"+sText+"<"
Debug "Adresse: >"+Str(@sText)+"<"
*Text=@sText
Debug "Adresse 2: >"+Str(@*Text)+"<"
Debug ""
Debug "Prozedur"
test_str(@sText)
Debug "Prozedur Ende"
Debug ""
Debug "TEST_STR Ende: >"+sText+"<"
Debug "Adresse: >"+Str(@sText)+"<"
*Text=@sText
Debug "Adresse 2: >"+Str(@*Text)+"<"

Kann zwar die Prozedur etwas verändern
Code: Alles auswählen
Procedure test_str(*sTest.String)
Debug "P-Adresse Proc1: >"+Str(*sTest)+"<"
Debug "P-Adresse Proc2: >"+Str(@*sTest\s)+"<"
*Test.String=@*sTest
Debug "P-TEST:"+ *Test\s
*Test\s="TEST225555555555555555555555555555555552"
Debug "P-Adresse Proc1: >"+Str(*sTest)+"<"
Debug "P-Adresse Proc2: >"+Str(@*sTest\s)+"<"
Debug "P-TEST2:"+ *Test\s
Wie gehts richtig? Stehe da irgendwie auf der Leitung!
Danke!