![]() |
AW: ANSISTRING unter Linux verfügbar ???
Zitat:
|
AW: ANSISTRING unter Linux verfügbar ???
Zitat:
Warum sollte man dann auf einer Plattform sauber mit TBytes arbeiten und auf der anderen (vermutlich noch mit IFDEFs gewürzt) bei einem unpassenden AnsiString-Container bleiben? |
AW: ANSISTRING unter Linux verfügbar ???
Zitat:
|
AW: ANSISTRING unter Linux verfügbar ???
Zitat:
|
AW: ANSISTRING unter Linux verfügbar ???
Z.B. für Konvertierungsaufgaben wäre es ganz schön gewesen.
Aber wer die alten Delphis noch in Betrieb hat wird die Klippen wohl kennen. Gruß K-H |
AW: ANSISTRING unter Linux verfügbar ???
wenn ich Ansistring jetzt durch TBtyes für LINUX ersetzen lässt sich diese Zeile nicht mehr kompilieren
Delphi-Quellcode:
if SaveString <> '' then
FS.Write(Pointer(SaveString)^, Length(SaveString) * SizeOf(AnsiChar)); wie lautet hier die Lösung um unter beiden Plattformen mit einer CodeVariante auszukommen ? Geht es ohne weitere
Delphi-Quellcode:
$Ifdef
|
AW: ANSISTRING unter Linux verfügbar ???
Zitat:
Das ist ja was ich geschrieben hatte... es macht keinen Sinn mit IFDEF verschiedene Typen zu nutzen. Denn du musst den Code ohnehin für TBytes anpassen und hast dann sauberen Code. Da macht es doch keinen Sinn per IFDEF unter Windows wieder auf unsauberen Code umzuschalten... Beides unter einen Hut bekommen funktioniert nicht, weil TBytes nullbasiert ist, AnsiStrings aber 1-basiert. Ansonsten könnte man die Adresse des ersten Elements benutzen statt auf Pointer zu casten. |
AW: ANSISTRING unter Linux verfügbar ???
Zitat:
Delphi-Quellcode:
So vielleicht? In der Hoffnung es gibt mit Linux auch TBytesStream?
procedure SaveBytesToFile(const Data: TBytes; const FileName: string);
var stream: TBytesStream; begin stream := TBytesStream.Create(Data); try stream.SaveToFile(FileName); finally stream.Free; end; end; |
AW: ANSISTRING unter Linux verfügbar ???
Als ich vor ein paar Jahren Synapse Android und iOS tauglich machen wollte, habe ich auch Rotz und Wasser geschwitzt. Da ist an allen Ecken und Enden mit Ansistring hantiert wurden und TMarshal.AsAnsi bzw. MarshaledAString schied für aus.
Vielleicht hilft dir ja meine damals verwendete Lösung: ![]() Dabei fällt mir auf, dass ich teilweise noch "fehlerhafte" Fragmente wie:
Code:
drin habe. Das sollte ich mal bei Gelegenheit noch anpassen.
Stream.Write(MarshaledAString(TMarshal.AsAnsi(Value))^, Length(Value));
{$ELSE} Stream.Write(PAnsiChar(Value)^, Length(Value)); Christian |
AW: ANSISTRING unter Linux verfügbar ???
Wie jaenicke es schon sagte, mach es so, wie es überall funktioniert und schmeiß alles Andere raus.
Zitat:
und da es immer 1 ist, kann man es natürlich auch weglassen.
Delphi-Quellcode:
ergibt das Selbe, ist aber nunmal sinnlos.
SizeOf(Byte)
Und warum es beim IF mit dem Array nicht geht, sollte klar sein, was man auch über Length lösen könnte, oder man lässt es einfach weg und schreibt dann halt auch die 0 Bytes. Nja, bezüglich TBytes würde ich dann natürlich auch die Überladung für TBytes verwenden, welches der TStream schon länger besitzt. Und wie gesagt, es gibt alternativen wie TFile.WriteAll* und TStringStraem, mit denen man sich garnicht um die Straem-Behandlung kümmern muß. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 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