AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ANSISTRING unter Linux verfügbar ???

Ein Thema von bernhard_LA · begonnen am 12. Jun 2018 · letzter Beitrag vom 24. Jun 2018
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#31

AW: ANSISTRING unter Linux verfügbar ???

  Alt 15. Jun 2018, 08:06
Warum benutzt du denn nicht einfach überall TBytes? Wenn du von Datenaustausch sprichst, hört sich das so nach Missbrauch von AnsiString als Datencontainer an.
weil evtl die Bibliothek nicht für Linux geschaffen wurde und konsequent AnsiString einsetzt? Ich hab vor etlichen Monaten mal versucht, die ADS Komponenten für Linux anzupassen und hab dann schliesslich aufgegeben, weil es überall AnsiString gibt und zu dem Zeitpunkt ich keine Möglichkeit (wie oben genannt) gefunden habe.
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#32

AW: ANSISTRING unter Linux verfügbar ???

  Alt 15. Jun 2018, 08:27
weil evtl die Bibliothek nicht für Linux geschaffen wurde und konsequent AnsiString einsetzt? Ich hab vor etlichen Monaten mal versucht, die ADS Komponenten für Linux anzupassen und hab dann schliesslich aufgegeben, weil es überall AnsiString gibt und zu dem Zeitpunkt ich keine Möglichkeit (wie oben genannt) gefunden habe.
Die Logik verstehe ich nicht. Dabei hilft es doch auch nicht mit verschiedenen Aliastypen auf den verschiedenen Systemen zu arbeiten. Wenn man TBytes auf einer Plattform benutzt, dann kann man das auch gleich überall nutzen, da man die Anpassung dafür ja ohnehin machen muss.

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?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#33

AW: ANSISTRING unter Linux verfügbar ???

  Alt 15. Jun 2018, 08:34
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?
Weil seit 15 Jahren gewachsen, immer noch Delphi 3 unterstützt, und nicht mit jeder neuen Version neu geschrieben wird. Ich wollte eine schnelle Umsetzung testen - und die ist mit einem Define an zentraler Stelle einfacher als in zig Units per Find&Repülace wild rumzuspielen
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#34

AW: ANSISTRING unter Linux verfügbar ???

  Alt 15. Jun 2018, 09:01
Wobei die älteren Delphis TBytes leider nicht zur Verfügung stellen.
Die unterstützen in der Regel (bis auf eine Ausnahme ) aber auch kein Linux.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#35

AW: ANSISTRING unter Linux verfügbar ???

  Alt 15. Jun 2018, 10:57
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
bernhard_LA

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#36

AW: ANSISTRING unter Linux verfügbar ???

  Alt 16. Jun 2018, 10:56
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 $Ifdef
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#37

AW: ANSISTRING unter Linux verfügbar ???

  Alt 16. Jun 2018, 11:09
wie lautet hier die Lösung um unter beiden Plattformen mit einer CodeVariante auszukommen ?
Geht es ohne weitere $Ifdef
Gar kein ifdef, nur TBytes auf allen Plattformen.

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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#38

AW: ANSISTRING unter Linux verfügbar ???

  Alt 16. Jun 2018, 11:24
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 ?
Delphi-Quellcode:
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;
So vielleicht? In der Hoffnung es gibt mit Linux auch TBytesStream?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
CHackbart

Registriert seit: 22. Okt 2012
267 Beiträge
 
#39

AW: ANSISTRING unter Linux verfügbar ???

  Alt 16. Jun 2018, 11:36
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: https://github.com/TetrisSQC/Synapse...e/synabyte.pas

Dabei fällt mir auf, dass ich teilweise noch "fehlerhafte" Fragmente wie:

Code:
 Stream.Write(MarshaledAString(TMarshal.AsAnsi(Value))^, Length(Value));
     {$ELSE}
  Stream.Write(PAnsiChar(Value)^, Length(Value));
drin habe. Das sollte ich mal bei Gelegenheit noch anpassen.

Christian

Geändert von CHackbart (16. Jun 2018 um 11:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#40

AW: ANSISTRING unter Linux verfügbar ???

  Alt 16. Jun 2018, 12:36
Wie jaenicke es schon sagte, mach es so, wie es überall funktioniert und schmeiß alles Andere raus.

Delphi-Quellcode:
    if SaveString <> 'then
      FS.Write(Pointer(SaveString)^, Length(SaveString) * SizeOf(AnsiChar));
Aber grundsätzlich funktioniert auch dieser Code mit AnsiString und TBytes, wobei SizeOf(AnsiChar) überall passt, da ja überall ANSI drin ist,
und da es immer 1 ist, kann man es natürlich auch weglassen. SizeOf(Byte) ergibt das Selbe, ist aber nunmal sinnlos.

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ß.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz