Delphi 7-Programm auf eine aktuelle Delphi-Version migrieren

Viele Programme, die mit Delphi 7 entstanden sind, laufen bis heute zuverlässig. Schwierig wird es, wenn sich etwas ändern muss: ein neues Windows, eine Schnittstelle mit aktueller Verschlüsselung, ein Bildschirm mit hoher Auflösung oder eine Anforderung, die sich mit den alten Mitteln nicht umsetzen lässt. Dann stellt sich die Frage, wie das Programm auf einer aktuelle Delphi-Version kompilierbar wird. Auf dieser Seite beschreibe ich, worauf es dabei ankommt. Den Sprung von Delphi 7 auf Delphi 13 habe ich selbst mehrfach erfolgreich durchgeführt.

Der Weg der Migration
  1. 1Bestand sichernQuellcode vollständig? Versionskontrolle wie Git einführen.
  2. 2Komponenten entscheidenAktualisieren, mitnehmen, ersetzen oder weglassen.
  3. 3Code anpassenUnicode, 64 Bit, Verschlüsselung.
  4. 4Oberfläche anpassenSaubere Darstellung bei hoher Auflösung.
  5. 5VergleichenArbeitet die neue Version wie die alte?
  6. 6UmstellenBei Bedarf mit Parallelbetrieb.

Zuerst: Ist alles da?

Bevor es um Technik geht, muss klar sein, ob der Quellcode vollständig vorliegt, einschließlich aller Komponenten von Drittanbietern. Bei älteren Projekten fehlt oft eine Versionsverwaltung. Der Code liegt dann in einem Ordner auf dem Rechner des Entwicklers, und niemand weiß genau, welche Fassung beim Anwender läuft. Deshalb kommt der Code als Erstes in eine Versionsverwaltung wie Git. Das ist unspektakulär, aber jede spätere Änderung baut darauf auf.

Liegen von einer Komponente nur kompilierte Dateien (DCUs) ohne Quellcode vor, lässt sie sich unter einer neuen Delphi-Version nicht verwenden. DCUs passen nur zu der Version, mit der sie erzeugt wurden.

Die Komponenten

Ein Delphi 7-Programm nutzt fast immer Komponenten, die seit Jahren nicht aktualisiert wurden. Für jede muss man entscheiden: Gibt es eine aktuelle Version, lässt sich die alte unter Delphi 13 lauffähig machen, oder wird sie ersetzt?

Manchmal ist die Antwort einfach. Viele Komponenten kamen damals ins Programm, weil Delphi 7 für die Oberfläche wenig mitbrachte. Was früher etwa aus der JVCL kam, kann Delphi heute oft selbst. Dann fällt eine Abhängigkeit weg, statt dass man sie weiter mitschleppt. Wo eine Komponente aktualisiert wird, kostet das häufig eine neue Lizenz. Das gehört in die Planung.

Alter Code: mitnehmen oder umbauen

Nicht jede Unit muss modernisiert werden. Oft ist es vernünftig, alten Code nur so weit anzupassen, dass er unter Delphi 13 läuft, und ihn erst umzubauen, wenn ohnehin eine Änderung ansteht. An anderen Stellen lohnt sich der Umbau sofort, weil der alte Aufbau jede weitere Änderung teuer macht. Diese Abwägung trifft man Stück für Stück, nicht einmal für das ganze Programm.

Die technischen Hürden

Unicode. Seit Delphi 2009 ist ein String ein Unicode-String. Code, der Zeichenketten als Bytes behandelt, mit PChar arbeitet, Strings fester Länge wie string[n] nutzt oder Text an DLLs und andere Programme übergibt, muss geprüft und angepasst werden. Der Compiler findet vieles, aber nicht alles.

64 Bit. Bei der Umstellung auf 64 Bit müssen alle Stellen gefunden werden, an denen Zeiger und Ganzzahlen gleichgesetzt werden, und Windows-Aufrufe brauchen die richtigen Typen. Die BDE gibt es für 64 Bit nicht.

Netzwerk und Verschlüsselung. Alles, was über das Netz kommuniziert, etwa mit Indy, braucht eine aktuelle Verschlüsselung (TLS). Alte Stände der Komponenten und der zugehörigen OpenSSL-Bibliotheken werden von heutigen Servern abgelehnt.

Bildschirmauflösung. Auf aktuellen Monitoren mit Skalierung wirken alte Programme verschwommen. Delphi 13 kann hohe Auflösungen sauber darstellen, aber erst, wenn die Formulare dafür angepasst sind. Sonst verrutschen Beschriftungen, Schaltflächen werden abgeschnitten und Symbole sind zu klein. Das bemerken Anwender meist als Erstes, und es braucht oft mehr Zeit als erwartet.

Warum umstellen, wenn es noch läuft?

Für Delphi 7 und viele Komponenten aus dieser Zeit gibt es seit Jahren keine Updates mehr. Wird eine Schwachstelle bekannt, etwa in einer alten Netzwerk- oder Verschlüsselungsbibliothek, lässt sie sich oft nur mit Umwegen schließen. Für Hersteller, die ihre Software an andere verkaufen, kommt der Cyber Resilience Act (CRA) der EU hinzu. Sie müssen Schwachstellen melden und beheben und nachweisen können, welche Fremdbestandteile in ihrem Produkt stecken (SBOM). Mit einem alten Delphi-Stand und Komponenten, deren Herkunft niemand mehr genau kennt, ist das schwer. Für Programme, die nur im eigenen Betrieb laufen, gilt der CRA in der Regel nicht. Das Sicherheitsproblem bleibt trotzdem.

Wovon der Aufwand abhängt

Eine seriöse Zahl lässt sich erst nennen, wenn man den Code gesehen hat. Den größten Einfluss haben die Zahl und der Zustand der Drittkomponenten, der Umgang mit Zeichenketten und Schnittstellen, der Umfang der Oberfläche und die Frage, ob es Tests oder wenigstens Vergleichsdaten gibt, mit denen sich prüfen lässt, ob die neue Version dasselbe rechnet wie die alte. Während der Umstellung muss die alte Version meist weiter gepflegt werden. Wie lange beide Stände nebeneinander laufen, sollte man vorher festlegen.

Wann ein Neubau ehrlicher ist

Eine Migration lohnt sich, wenn die fachliche Logik stimmt und das Programm nur technisch in die Jahre gekommen ist. Passen dagegen auch die Abläufe nicht mehr, stößt die Datenstruktur an ihre Grenzen oder ist der Code so verflochten, dass jede Änderung an anderer Stelle Fehler auslöst, kann ein Neubau am Ende günstiger sein. Das sage ich Ihnen dann auch.

Der Einstieg

Ob sich die Migration lohnt und in welcher Reihenfolge man vorgeht, kläre ich in einer Standortbestimmung zum Festpreis ab 600 €. Sie erhalten einen schriftlichen Bericht mit Prioritäten und Empfehlungen. Ein kostenloses Erstgespräch ist der erste Schritt.