Entwickler-Ecke

Programmierwerkzeuge - Delphi 7 --> Delphi 10.3: Erfahrung


GuaAck - So 04.10.20 01:12
Titel: Delphi 7 --> Delphi 10.3: Erfahrung
Hallo,

ich habe jetzt einige Projekte erfolgreich auf 10.3 umgestellt. Mit etwas Übung ging es dann erstaunlich einfach.

Ein paar Hinweise an alle, die ebenso ängstlich sind wie ich es war:

Ansicode und Unicode waren die häufigsten Änderungspunkte, das war aus den Antworten auf meine Frage im Forum klar. Ich hatte versucht, einfach alle char in ansichar, string in ansistring usw. zu ändern, aber das klemmte an allen Ecken. Ich habe genervt aufgegeben. Also habe ich mein Programm auf Unicode umgestellt. Das war viel einfacher, weil alle String, Char und die ganzen Funktionen natürlich in sich schlüssig sind. Char ist nur eben nicht ein Byte. Ich hatte variante Records, mit denen ich ein "array of bytes" als "array of char" interpretieren kann, da musste ich dann ansichar nehmen, aber Ansi zu Unicode ist kein Problem.

In einigen Anwendungen stelle ich Messdaten mit DirectX in 3D dar. Ich wollte von DirectX 8 auf DirectX 11 oder 12 umstellen, aber die Header-Dateien, die ich im Internet gefunden habe, sind vollkommen anders als meine bisherige Library, die um die Headers herum eigene Funktionen bereitstellt. Also habe ich auch diese DirectX-Library umgestellt. Ich musste nur an vier Stellen was an Unicode anpassen 4 chars = 1 DWORD (32 Bit) gilt eben nicht mehr bei Unicode. Und dann war da noch ein spezielles Problem mit varianten Records, wofür der Entwickler der Library aber bereits die Abfrage der Delphi-Version eingebaut hat; also einfach Abfrage auf VER330 (= Delphi 10.3) ergänzt. Dann lief es bestens.

Ich bin wieder mutig geworden in der Sache und hoffe, vielleicht jemandem mit meinem Betrag geholfen zu haben.

Viele Grüße
GuaAck


jaenicke - So 04.10.20 08:40

user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
Das war viel einfacher, weil alle String, Char und die ganzen Funktionen natürlich in sich schlüssig sind.
Stimmt, außerdem ist Unicode heute natürlich auch sinnvoller.

user profile iconGuaAck hat folgendes geschrieben Zum zitierten Posting springen:
Ich hatte variante Records, mit denen ich ein "array of bytes" als "array of char" interpretieren kann, da musste ich dann ansichar nehmen, aber Ansi zu Unicode ist kein Problem.
Es gibt übrigens auch so etwas wie RawByteString usw. (statt AnsiString) um mit Strings zu arbeiten, die Bytewerte beinhalten. Denn ansonsten passiert bei der Nutzung von AnsiString evtl. eine automatische Umwandlung aufgrund der Zeichensätze.

Leider hatten wir auch noch Monate nach der Umstellung Stellen im Code, bei denen es doch nicht korrekt geklappt hatte. Wichtig ist auch sich die Warnungen anzuschauen.


Tastaro - Mo 05.10.20 12:58

Ich habe kürzlich auch ein Projekt mit ein paar hunderttausend Programmzeilen umgestellt.
Entwickelt wurde es ursprünglich in Delphi 7, dann auf Delphi 2007 portiert.

Wir haben uns lange vor diesem Schritt gescheut. da darin Strings in Binärdateien gespeichert und über TCP/IP übertragen werden.
Zudem verwenden wir zugekaufte und auch eine Freeware-Komponente.

Schlussendlich ging es aber dann doch problemloser als befürchtet. Für die gekauften Komponenten gab es Updates. Sogar für die Freeware-Komponente war eine Unicode-Version verfügbar. <3

Das größte Problem hatte ich mit chinesischen Schriftzeichen auf chinesischen Rechnern (ok, Polnisch hat den gleichen Kummer gemacht). Da hat die von user profile iconjaenicke erwähnte implizite Konvertierung zugeschlagen.

Bei den Binärfiles musste ich dann auch ein TEncoding einbauen, damit alles lief wie vorher.

Aber im Großen und Ganzen: Super Sache!

Nur dass Delphi nach so vielen Jahren noch immer keine Multicast-Events hat, finde enttäuschend.


GuaAck - Mi 14.10.20 10:14

Hallo Jaenicke,

zu
Zitat:
Es gibt übrigens auch so etwas wie RawByteString usw. (statt AnsiString)....

Das scheint möglicherweise wieder von der Delphi-Version abzuhängen. In meiner Hilfe zu Delphi 10.3 finde ich:
Zitat:
System.RawByteStringAus RAD Studio API Documentation
Übergeordnet: System

Delphi

type RawByteString = AnsiString;

Als kein Unterschied.

Trotzdem Danke für Deinen Beitrag,
Gruß
GuaAck


jaenicke - Mi 14.10.20 10:47

Ja, es ist ein AnsiString, aber ohne Codepagezuordnung und damit ohne Umwandlung. In dem Record vor dem Start des Strings stehen ja Codepage und Länge des Strings...

Wie das intern die Compilermagic macht, weiß ich nicht, aber so sollte es sein. (Und wir hatten damit auch keine Probleme bisher.)