AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Umstellung D7 auf XE

Ein Thema von hanspeter · begonnen am 24. Okt 2013 · letzter Beitrag vom 28. Okt 2013
Antwort Antwort
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#1

Umstellung D7 auf XE

  Alt 24. Okt 2013, 14:45
Delphi-Version: 5
Hallo,

ich beginne ein Legacy-Projekt auf XE umzustellen.

Hier wird sehr häufig nachfolgendert Konstruct verwendet. (Beispiel)
Delphi-Quellcode:
type
Dat = record
  PLZ: String[8];
  Ort: String[40];
end;
Das wird dann so verwendet:

Delphi-Quellcode:
r.Plz := '1234';
r.Ort := 'Hier';

Mem := TMemorystream.Create;
Mem.Write( r,sizeof(r));
u.s.w.

Mit String bekomme ich da ja Probleme.
Wie könnte man so einen Construct am
zweckmäßigsten umstellen ohne sich Unicode zu verbauen. ?

Für einen Tip dankbar.

Mit Gruß Peter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Umstellung D7 auf XE

  Alt 24. Okt 2013, 14:51
Delphi-Quellcode:
type
Dat = record
  PLZ: array[1..8] of WideChar;
  Ort: array[1..40] of WideChar;
end;
Falls es probleme Beim Zuweisen/Auslesen gibt, dann
- kann man die Arrays nochmal in einen Record packen und mit Operatoren versehen
- dem Dat-record Property zuweisen, welche über Getter/Setter auf das Feld zugreifen

Und den Zugriff im Programmcode kann man notfals über Private/Public steuern.



Oder du verwendest statt dem TMemoryStream lieber sowas wie TStringStream, TReader/TWriter, oder Dergleichen.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (24. Okt 2013 um 15:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Umstellung D7 auf XE

  Alt 24. Okt 2013, 14:58
Solange die Inhalte des MemoryStream nur innerhalb deines eigenen Programms verwendet werden und nicht kompatibel zu anderen Programmen bleiben müssen, kannst du das Speicherformat ja beliebig ändern. Zum einen kannst du dann die Begrenzung der String-Längen aufheben und auch Unicode implementieren. Dazu müsstest du aber die Record-Strukturen vom Speicherformat entkoppeln.

Als erstes würde ich die Records mit Methoden zum streamen erweitern (LoadFromStream, SaveToStream), die zunächst lediglich die direkten Read- und Write-Zugriffe kapseln. Wenn dann nirgendwo mehr das Speicherlayout der Records vorausgesetzt ist, kannst du die Records schrittweise umbauen und die Stream-Methoden entsprechend anpassen.

Wie gesagt, das geht dann nicht (so einfach), wenn der Stream-Inhalt außerhalb verwendet wird - und sei es, daß du mit dem alten Format gespeicherte Dateien einliest.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von romankassebaum
romankassebaum

Registriert seit: 11. Jun 2011
21 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Umstellung D7 auf XE

  Alt 24. Okt 2013, 20:35
Hallo,

ich möchte darauf hinweisen, dass der ShortString aus Deinem Record ein AnsiString ist. Das bedeutet, dass Du unter Unicode nicht zwingend Probleme bekommst.
Es hängt davon ab, ob Du die Daten mit anderen Anwendungen austauscht und selbstverständlich welche Zeichen Du rein schreibst.

Prinzipiell wäre es natürlich besser, den Record mit Methoden wie LoadFromStream und SaveToStream zu versehen. Möglicherweise kann es auch günstig sein, ein Objekt oder gar ein Interface stattdessen zu verwenden. Das hängt von Deiner Anwendung ab.

Ach ja, falls Du irgendwann mit dem NEXTGEN Compiler arbeiten möchtest, dann solltest Du Dich rechtzeitig von den ShortStrings verabschieden.

--
Viele Grüße,

Roman Kassebaum
Embarcadero Technology Partner
Embarcadero MVP
Blog: http://blog.kassebaum.eu
Roman Kassebaum
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Umstellung D7 auf XE

  Alt 28. Okt 2013, 11:27
Vielen Dank für die Tips.
Ich denke, dass ich die Records wohl auf Klassen umstellen werde.
Statt der Ablage in einem Memorystream läßt sich, warscheinlich auch schneller,
dass über eine Objketliste oder ein Directionary realisieren.

Mit Gruß
Peter
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:38 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