Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
4 - Anregungen & Vorschläge

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Vorherige Nachricht  |  Nächste Nachricht 
 Re: PathCompactPath im Zusammenhang mit der internen Listbox
Autor: RGH (---.hsi2.kabelbw.de)
Datum:   04.11.07 21:10

Hallo Jörg,

hier hat XProfan offensichtlich eines der "Probleme" von Delphi geerbt:

Wird ein String unverändert einem anderen zugewiesen, wird nicht der Inhalt einem neuen String übergeben, sondern der neue auf die Adresse des alten gesetzt. Das spart Speicher und macht auch nichts, solange der neue String ja unverändert bleibt. Würde man den neuen String nun mit eine regulären Funktion verändern, bekäme er natürlich einen neuen Speicherbereich und der alte String bliebe unverändert:
  Declare alt$, neu$
  alt$ = "Hugo"
  neu$ = alt$
  Print "alt - " + str$(addr(alt$)) + ": " + alt$
  print "neu - " + str$(addr(neu$)) + ": " + neu$
  neu$ = ins$("z",neu$,1)
  Print "alt - " + str$(addr(alt$)) + ": " + alt$
  print "neu - " + str$(addr(neu$)) + ": " + neu$
  WaitInput
  End
 

Wenn aber nun der neue String durch direkte Speichermanipulation verändert wird, bekommt Delphi (und somit auch XProfan) davon nichts mit. Die Folge: Beide Strings, der alte und der neue, werden verändert und bleiben an der bisherigen Adresse:
  Declare alt$, neu$
  alt$ = "Hugo"
  neu$ = alt$
  Print "alt - " + str$(addr(alt$)) + ": " + alt$
  print "neu - " + str$(addr(neu$)) + ": " + neu$
  Var a& = addr(neu$)
  byte a&,1 = 90
  Print "alt - " + str$(addr(alt$)) + ": " + alt$
  print "neu - " + str$(addr(neu$)) + ": " + neu$
  WaitInput
  End
 

In Deinem Beispiel geschieht das nicht durch den Byte-Befehl sondern durch die Übergabe der Adresse an eine API-Funktion.

BTW: Dieser Effekt hat mir auch schon in Delphi graue Haare und schlaflose Nächte bereitet.

In Deinem Fall wäre es also der sichere Weg, den String in eine Bereichsvariable zu kopieren und deren Adresse an die API-Funktion zu geben.

In der nächsten XProfan-Version werde ich ein Auge darauf haben und bei String-Zuweisungen dafür sorgen, dass der neue String in jedem Fall eine eigene Adresse im Speicher bekommt.

Gruß
Roland

Offizielle Homepage: http://www.xprofan.de
Der neue PROFAN-FAN-SHOP: http://www.spreadshirt.de/shop.php?sid=9330
Das kostenlose Kartenspiel: http://www.rgh-soft.de/sprace/sprace.htm

 Beitrag beantworten  |  Foren-Liste  |  Alle Antworten   Neuerer Beitrag  |  Älteres Thema 

 Beiträge Autor  Datum
 PathCompactPath im Zusammenhang mit der internen Listbox  Neu
Jörg Sellmeyer 04.11.07 17:18 
 Re: PathCompactPath im Zusammenhang mit der internen Listbox  Neu
RGH 04.11.07 21:10 
 Re: PathCompactPath im Zusammenhang mit der internen Listbox  Neu
Jörg Sellmeyer 04.11.07 21:57 
 Re: PathCompactPath im Zusammenhang mit der internen Listbox  Neu
Jörg Sellmeyer 19.05.15 17:45 
 Re: PathCompactPath im Zusammenhang mit der internen Listbox  Neu
RGH 19.05.15 20:17 
 Re: PathCompactPath im Zusammenhang mit der internen Listbox  Neu
RGH 19.05.15 20:52 
 Re: PathCompactPath im Zusammenhang mit der internen Listbox  Neu
Jörg Sellmeyer 19.05.15 23:28 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org