Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme mit WideChar (https://www.delphipraxis.net/12868-probleme-mit-widechar.html)

jbg 15. Dez 2003 18:04

Re: Probleme mit WideChar
 
Zitat:

Zitat von patty
Aber sollte das String-Array nicht gerade in ein PWideChar-Array umgewandelt werden?

Warum Umwandeln? Ein WideString ist nichts anderes als ein PWideChar unter Windows, nur dass der Delphi Compiler hier ein wenig Arbeit abnimmt. Schau dir noch einmal die WStrToPWChar Funktion an. Dort wird der WideString einfach in einen Zeiger umgewandelt und zurückgeliefert (wenn er nicht leer ist).

patty 16. Dez 2003 06:23

Re: Probleme mit WideChar
 
Zitat:

Zitat von jbg
Warum Umwandeln? Ein WideString ist nichts anderes als ein PWideChar unter Windows, nur dass der Delphi Compiler hier ein wenig Arbeit abnimmt. Schau dir noch einmal die WStrToPWChar Funktion an. Dort wird der WideString einfach in einen Zeiger umgewandelt und zurückgeliefert (wenn er nicht leer ist).

"Umwandlen" natuerlich nicht im Sinne von Konvertieren, sondern so, dass ich eben hinterher vom Datentyp her als PWideChar auf den Speicherbereich zugreife :wink:

Canton 16. Dez 2003 08:22

Re: Probleme mit WideChar
 
Zitat:

Ansonsten stimmen evtl. die Strings vorher schon nicht...?
die Strings vorher stimmen da das ganzen wunderbar funktioniert wenn ich es nicht dynamisch mache:

Delphi-Quellcode:
SItemID[0]:=@WideString(Test[0])[1];
SItemID[1]:=@WideString(Test[1])[1];
SItemID[2]:=@WideString(Test[2])[1];
SItemID[3]:=@WideString(Test[3])[1];
SItemID[4]:=@WideString(Test[4])[1];
und meine schleife macht ja eigentlich auch nichts anderes ausser das sie halt jeden einzeln durchgeht und dann ab dem index 2 das bedürfnis hat mir den wert vom index 2 in index 0 und 2 zu schreiben (also wie in meinem post vorher beschrieben). Und da liegt ja mein Problem wie kann ich verhinder das er mir den Wert vom Index i-2 verändert wenn er eigentlich grade den index i bearbeitet?

ach ja die strings die in test stehen kommen aus ner ini-file. ist es falsch die nachdem öffnen und dem rausholen aller benötigten informationen zu schließen?? vielleicht liegt es ja daran. aber leichen wollte ich eigentlich nicht hinterlassen *gg*

patty 16. Dez 2003 17:05

Re: Probleme mit WideChar
 
:drunken: Ich muss doch getraeumt haben! Der Fehler ist ja offensichtlich und wurde auch weiter oben glaub ich schon mal angesprochen. Du wandelst mit WideString(...) ein AnsiString in ein WideString um, beachtest aber nicht, dass diese Umwandlung nur temporaer geschieht. Du speicherst also einen Pointer auf einen Speicherbereich, der nach Ausfuehrung der Codezeile wieder freigegeben wird. Wahrscheinlich arbeitet der Optimizer in Schleifen etwas anders als bei deiner letzten Befehlsfolge, was die Nutzung von Speicher angeht - das erklaert die unterschiedlichen Ergebnisse. Dass es nicht sofort zu einer Schutzverletzung kommt, kommt wahrscheinlich daher, dass die Strings recht kurz sind und die Win-Speicherverwaltung nicht Byte-genau arbeitet. Die Loesung waere demnach eine der folgenden:

1. mache das Original-String-Array als array of WideString ODER:
2. erstelle ein zusaetzliches Array vom Typ WideString und mach darauf zuerst eine Zuweisung

und verzichte auf das WideString(...) in der Anweisung. Das sollte gehen! :angle:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:19 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz