Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi String To PWideChar (https://www.delphipraxis.net/97866-string-pwidechar.html)

Piro 17. Aug 2007 15:12


String To PWideChar
 
Hi,

ich habe mir jetzt einige Beiträge angeschaut aber keiner sagt mir genau, wie ich diese Typumwandlung hinbekomme. Das kann doch nicht so schwer ein oder doch?

Für Anregungen oder Hilfestellungen wäre ich echt dankbar.

Gruß, Sven

messie 17. Aug 2007 15:16

Re: String To PWideChar
 
Meinst Du

Delphi-Quellcode:
PWideChar(WideString(String))?
Grüße, Messie

sniper_w 17. Aug 2007 15:17

Re: String To PWideChar
 
Hi, deine Frage ist IMHO unkonkret. Wie auch immer:
Delphi-Quellcode:
var s: string;
  p: PWideChar;
begin
  p := @s[1];

Gausi 17. Aug 2007 15:27

Re: String To PWideChar
 
Letzteres dürfte nicht wie gewünscht funktionieren. Ein String braucht ein Byte pro Zeichen, ein WideString zwei. Deswegen muss man auch
Delphi-Quellcode:
PWideChar(WideString(aString));
, denn
Delphi-Quellcode:
PWideChar(aString);
reicht nicht aus (da meckert der Compiler auch mit "bedenkliche Typumwandlung").

Piro 17. Aug 2007 15:41

Re: String To PWideChar
 
@messie

Dank, das war die Lösung.

Schönes Wochenende

messie 18. Aug 2007 22:44

Re: String To PWideChar
 
Ich würde angesichts des aussagefähigen Titels in Hinblick auf spätere Suchen gerne nochmal in die Runde fragen: was passiert bei den Typecasts genau? Der Befehl WideString() wandelt jedes Element des Stringarrays von eimem ByteCharacter in ein WordCharacter um. Windows XP und mein D6 können aber beliebig damit umgehen, d.h ich kann einen Widestring fehlerfrei in ein Stringelement tun und umgekehrt.
Bei PChar wird ein nullterminierter String erzeugt, also der String endet am ersten Byte mit dem Wert Null. Wie verhält sich das Array bei PWideChar und wie wird das erkannt?

Viele Grüße, Messie

Olli 18. Aug 2007 23:19

Re: String To PWideChar
 
Zitat:

Zitat von messie
Ich würde angesichts des aussagefähigen Titels in Hinblick auf spätere Suchen gerne nochmal in die Runde fragen: was passiert bei den Typecasts genau? Der Befehl WideString() wandelt jedes Element des Stringarrays von eimem ByteCharacter in ein WordCharacter um. Windows XP und mein D6 können aber beliebig damit umgehen, d.h ich kann einen Widestring fehlerfrei in ein Stringelement tun und umgekehrt.
Bei PChar wird ein nullterminierter String erzeugt, also der String endet am ersten Byte mit dem Wert Null. Wie verhält sich das Array bei PWideChar und wie wird das erkannt?

Bei PWideChar handelt es sich ebenfalls um eine nullterminierte Zeichenkette. Der WideString-Typ von Borland basiert allerdings (im Gegensatz zu AnsiString) auf einem Typ der vom System beretigestellt wird.

Es gibt nur ein klitzekleines Problem mit Konvertierung von PChar nach PWideChar ... wenn es wie oben beschrieben gemacht wird, erfolgt die interne Konvertierung mit der ANSI-Codepage. Allerdings gibt es eine Menge anderer möglicher und gültiger Konvertierungen in dieser Richtung (u.a. sprachabhängig). Also vielleicht lieber mal drüber nachdenken was man genau erreichen will (wobei ich nicht sagen will, daß die Konvertierung wie vorgeschlagen, nicht für den Fall okay sein könnte) und dann entscheiden.

Siehe: MultiByteToWideChar


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