Hallo Community,
ich möchte „alte“ Delphi-Bibliotheken aus den Jahren 2002 – 2004 „reanimieren“, weil sie damals einfach exzellent funktioniert haben und heute auch noch sehr gute Dienste leisten würden.
Dabei ergibt sich folgendes Problem:
Die Typen Char und String hatten damals noch andere Bedeutungen.
Meine – leider NICHT funktionierende – Idee sieht so aus:
Delphi-Quellcode:
Type
Char = AnsiChar;
String = AnsiString;
Der Compiler (Delphi XE5 Professional) mag das allerdings nicht.
Der Compiler hat immer recht
. Das kann nicht funktionieren.
Die Portierung nach
Unicode (also Char = Widechar, String = Unicodestring, PChar = PWidechar) muss nicht so aufwendig sein wie Du glaubst. Nach meiner Erfahrung mit der Umstellung seinerzeit kompiliert der Löwenanteil des alten Kodes ohne Probleme und funktioniert sogar noch. Falls Du einen Satz halbwegs vollständiger Unittests für den alten Kode hast kann man auch Problemfälle schnell finden.
Das sind insbesondere:
- Kode, der annimmt, Sizeof(Char) = Sizeof(Byte)
- Kode, der Strings als Speicher für binäre Daten mißbraucht
- Kode, der Strings in Dateien speichert oder aus diesen liest (muss aber kein wirkliches Problem sein)
- Kode, der mit externen DLLs interagiert, die PAnsiChar als Parameter erfordern
Wenn Du alten Kode wiederverwenden willst, mach Dir die Mühe, ihn ordentlich auf
Unicode zu portieren, und falls Du noch keine Unittests hast, schreib welche. Das ist zwar jetzt mehr Aufwand, aber es vermeidet jede Mengen Probleme in der Zukunft.