![]() |
WideString - länge "korrigieren"
Wenn bei einem Widestring irgendwo ein Doppel-NullByte eingefügt wird, wie kann ich dann Delphi verklickern, dass es den Längen-wert korrigieren sollte?
z.B. alter Inhalt : "TestString" neuer Inhalt : "result'#0'ing" length(x) liefert noch immer 10. setlength(x, StrLen(PChar(string(x)))) kann's ja net sein, das muss schöner gehen. Danke! P.S.: Das gleiche Problem mit "normalen" strings demonstriert:
Delphi-Quellcode:
Wie "korrigiere" ich s, so dass Length hier 5 liefert?
procedure TForm1.Button1Click(Sender: TObject);
var s : string; begin s:='Hallo'+#0+Caption; Memo1.Lines.Add('length = '+IntToStr(length(s))); Memo1.Lines.Add(s); end; Setlength(pos(#0... ist ja auch so eine miese Lösung, da gibt's doch sicher was "richtiges"... Danke! |
Re: WideString - länge "korrigieren"
Bei Delphi sind Strings nicht Null Terminiert! Kannst du dir die Position nicht merken und dann mittels Copy(...) arbeiten?
|
Re: WideString - länge "korrigieren"
Zitat:
Sieht in etwa so aus:
Delphi-Quellcode:
... und jetzt sind da irgendwelche Strings drin, mit einer Länge <20 bzw 100.
setlength(a, 20);
setlength(b, 100); MyDLLFunction(Pointer(a), Pointer(b)); Nur eben das die Längeninfo von den Strings noch immer den alten Wert enthält. Ich hoffe jetzt wird klarer was das Problem ist. |
Re: WideString - länge "korrigieren"
die Suche nach der terminierenden 0 und davon abhängig ein SetLength ist unter diesen Umständen wohl die beste Lösung.
|
Re: WideString - länge "korrigieren"
Hallo ralfiii,
du könntest es so versuchen:
Delphi-Quellcode:
Gruß Hawkeye
var
s : string; begin s := PChar('result'#0'ing'); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:39 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 by Thomas Breitkreuz