![]() |
Re: WideString -> TStream?
Zitat:
Falls du aber mal einen string nicht konstant erweiterst, bevor du auf eine Element zugreifst: Wenn du das mit einem ansistring versuchst, dann greift das Programm bei einem leeren string auf Adresse $0000000 zu und es gibt eine AV. Bei WideString ist das (derzeit) aber wiederum völlig anders. Delphi macht aus dem Widestring einen PWideChar. Und wenn der widestring leer ist, dann gibt diese Funktion als Ergebnis einen gültigen Zeiger auf #00#00 im Datensegment zurück. Dadurch gibt es keine AV. Allerdings sollte man sich auf so etwas nicht verlassen (man weis ja nie was der Compiler morgen macht) und lieber vorher abfragen, ob ws ein Leerstring ist. Du kannst auch gleich statt "value[1]" PWideChar(Value) nehmen. Dann wärst du auf der sicheren Seite, wenn nicht ![]() PS: Ich frage mich grad, ob der Compiler bei WS+#0#0 2 Bytes oder 4 Bytes anhängt :gruebel: Edit: Bei mir sind es vier. |
Re: WideString -> TStream?
Zitat:
|
Re: WideString -> TStream?
Hallo.
@Mutze1: Wie sollte man den Code anders schreiben, damit er mit allen Compilereinstellungen funktioniert und sauber ist? Kann mir jemand erklären, wieso eigentlich bei der Auslagerung der Write()-Funktion ein ANSI String anstelle eines WideStrings geschrieben wird? Ist eigentlich ein komisches Phänomen. Gruß blackdrake |
Re: WideString -> TStream?
Zitat:
|
Re: WideString -> TStream?
Danke, hatte ich übersehen. Leider funktioniert es dann nicht mehr.
Folgender Code:
Delphi-Quellcode:
Erzeug nicht E[NULL]d[NULL]i[NULL]t[NULL]1[NULL][NULL], sondern "dd\".
public
x: tfilestream; procedure TForm1.write(const buffer;size:integer); begin x.Writebuffer(buffer,size); end; procedure TForm1.Button1Click(Sender: TObject); var ws: widestring; pwc: pwidechar; begin ws:=edit1.text; x:=tfilestream.Create('c:\test.txt',fmcreate); pwc := PWideChar(ws); Write(pwc, sizeof(wideChar)*(length(ws)+1)); x.free; end; Gruß blackdrake |
Re: WideString -> TStream?
Delphi-Quellcode:
Beachte das ^...
Write(pwc^, sizeof(wideChar)*(length(ws)+1));
|
Re: WideString -> TStream?
Vielen Dank :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz