Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi PWideChar im Strem speichern, wie geht das? (https://www.delphipraxis.net/142892-pwidechar-im-strem-speichern-wie-geht-das.html)

Alter Mann 5. Nov 2009 15:26


PWideChar im Strem speichern, wie geht das?
 
Hi,

wie kann ich einen PWideChar-Wert in einem Strem speichern?

Ich habe hier schon alles mögliche gelesen und versucht, es kommt immer
zu dem gleichen Ergebnis: Es wird nur der erste Buchstabe geschrieben.

Delphi-Quellcode:
...
var
  FFileName : PWideChar;
  FFileNameLength : Word;
...
FFileNameLength := Length(FFileName);
...
Write( FFileName^, FFileNameLength );
Write( FFileName[1], FFileNameLength );
Write( Pointer(FFileName)^, FFileNameLength );
...
Wie müsste es richtig sein?

Gruß

Alter Mann

Uwe Raabe 5. Nov 2009 15:44

Re: PWideChar im Strem speichern, wie geht das?
 
1) Ein WideChar ist zwei Bytes groß. Die Anzahl zu schreibender Bytes ist also zweimal so groß wie die Länge des Strings.

2) Wie kontrollierst du, welche Zeichen in den Stream geschrieben wurden?

fajac 5. Nov 2009 15:45

Re: PWideChar im Strem speichern, wie geht das?
 
Ungetestet:

Delphi-Quellcode:
var
  FFileName : PWideChar;
  FFileNameLength : Word;
  FFileString : WideString;
...
FFileString := WideString (FFileName);
FFileNameLength := Length (FFileString);
...
Write (FFileString, FFileNameLength * SizeOf (WideChar));

jbg 5. Nov 2009 17:05

Re: PWideChar im Strem speichern, wie geht das?
 
Zitat:

Zitat von fajac
Ungetestet

Genau. Denn der Code schreibt den Zeiger statt die Daten in den Stream.

Delphi-Quellcode:
var
  FFileName: PWideChar;
  FFileNameLength: Word;
  FFileString: WideString;
...
FFileString := WideString(FFileName);
FFileNameLength := Length(FFileString);
...
if FFileNameLength > 0 then { <== }
  Write(FFileString{ ==> }[1]{ <== }, FFileNameLength * SizeOf(WideChar));
[/quote]

Alter Mann 5. Nov 2009 17:29

Re: PWideChar im Strem speichern, wie geht das?
 
Hallo

scheinbar geht es nur über die 'Krücke' WideString, schade.

Danke und viele Grüße

Alter Mann


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 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