Autor Beitrag
Peter18
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 463
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Mo 18.12.17 16:41 
Ein freundliches Hallo an alle,

ich möchtr einen String in einen WideString sauber umwandeln. Die function "StringToWideChar" scheint mir da etwas Sperrig!

ausblenden Delphi-Quelltext
1:
function StringToWideChar(const Source: string; Dest: PWideChar; DestSize: Integer): PWideChar;					

Ist "Dest" die Zielvariable oder nur ein temporärer Speicher? Wie ist das korrekt zu handhaben? Oder gibt es noch ein bessere Lösung? Die Hilfe ist da etwas mager ausgestattet.

Grüße von der Nordsee

Peter


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Mo 18.12.2017 um 22:04
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2165
Erhaltene Danke: 399

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mo 18.12.17 17:05 
Guten Abend Peter18,

benutz' bitte die Hilfe dazu, siehe System.StringToWideChar.
Angewendet wird die Methode, wie jede andere (mit Rückgabewert).
Hier hast du einen Pointer als Rückgabwert, daher darfst du den Speicher (für die angelegte Variable) mit GetMem() reservieren und mit FreeMem() oder Dispose() freigeben.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 463
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Mo 18.12.17 18:22 
Hallo Frühlingsrolle,

Dank Dir für die Antwort. Die Hilfe unter "System.StringToWideChar." gibt zwar auch nicht viel mehr her, aber Deine Beschreibung hat zum Verständnis der Funktion beigetragen.

Inzwischen habe ich eine einfachere Methode gefunden:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  S : String    ;
  W : WideString;

begin
  S := 'String';
  W ;= S;

Geht anscheinend auch ohne Konvertierungsroutine.

Grüße von der Nordsee

Peter
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2165
Erhaltene Danke: 399

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 19.12.17 00:13 
Fehlt da nicht noch ein Cast auf WideString:

ausblenden Delphi-Quelltext
1:
W := WideString(S);					

Mit der Funktion sollte es so gehen:

ausblenden Delphi-Quelltext
1:
2:
3:
SetLength(W, Length(S));
StringToWideChar(S, @W[1], Length(S) + 1);
// -> "W" ausgeben lassen

Ob ein Cast allein genügt, oder ob man doch die Funktion anwenden sollte, hängt wohl vom Anwendungsfall ab.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Peter18 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 463
Erhaltene Danke: 2


Delphi4
BeitragVerfasst: Di 19.12.17 13:12 
Hallo Frühlingsrolle,

nochmals Dank für Deine Antwort!

Offenbar ist es mit einer einfachen Wertzuweisung getan! Der Dialog mit dem Server funktioniert. Die Strings sehen gut aus, auch im CPU-Fenster: Zeichen, Null, Zeichen, Null und am Ende 2 mal Null. (Zu lesen natürlich als Word: Null, Zeichen).

Grüße von der Nordsee wo die Sonne schwach durch die Wolkendecke schimmert

Peter

Für diesen Beitrag haben gedankt: Frühlingsrolle