AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Vordefinierte Delphi-Bezeichner Char & String umdefinieren?

Vordefinierte Delphi-Bezeichner Char & String umdefinieren?

Ein Thema von Andreas13 · begonnen am 2. Mai 2019 · letzter Beitrag vom 3. Mai 2019
Antwort Antwort
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
392 Beiträge
 
Delphi 10.3 Rio
 
#1

Vordefinierte Delphi-Bezeichner Char & String umdefinieren?

  Alt 2. Mai 2019, 13:10
Delphi-Version: XE5
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.

Geht es überhaupt so oder ähnlich, auf einen Schlag, oder muß man in kilometerlangen Quellcodes überall die Änderungen per Hand vornehmen und anpassen?
Vielleicht kennt jemand einen einfacheren Weg.

Danke & Gruß

Andreas
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.931 Beiträge
 
Delphi XE4 Professional
 
#2

AW: Vordefinierte Delphi-Bezeichner Char & String umdefinieren?

  Alt 2. Mai 2019, 13:11
Hallo,
leider geht wohl nur 2. Weg.
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.766 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Vordefinierte Delphi-Bezeichner Char & String umdefinieren?

  Alt 2. Mai 2019, 13:22
Noch besser wäre es die Bibliothek gleich nach Unicode zu portieren.
Markus Kinzler
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
7.931 Beiträge
 
Delphi XE4 Professional
 
#4

AW: Vordefinierte Delphi-Bezeichner Char & String umdefinieren?

  Alt 2. Mai 2019, 13:48
Hallo,
kommt auf die Bibliothek an.
Lass da mal ein AnsiChar-String-Operationen als PAnsiChar+ drin sein ...
Heiko
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.119 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Vordefinierte Delphi-Bezeichner Char & String umdefinieren?

  Alt 2. Mai 2019, 14:18
Ich würde auch eine radikale Überarbeitung vorziehen,
oder zumindest die Libraries erstmal in Lib_Alt.pas und Lib_Neu.pas doppeln, so dass man in Lib_Neu.pas immer bei Bedarf die benötigten Funktionen rüberziehen und überarbeiten kann (on Demand).
So lange bis irgendwann Alles korrekt in Lib_Neu.pas überarbeitet ist.

Dann könnten alte Apps wie gehabt mit Lib_Alt.pas laufen, und neue Apps die verbesserte Lib_Neu.pas nutzen.

Wenn Lib_Alt.pas dann endlich komplett überflüssig ist, könnten auch alte Apps auf die (hoffentlich) kompatible Lib_Neu.pas umgestellt werden
(Unit-Tests würden helfen).

Evtl auch erstmal grob Alles überarbeiten, und in einem Zwischenschritt eigene, neue Typen verwenden
Delphi-Quellcode:
Type
  MyLibChar = AnsiChar;
  MyLibString = AnsiString;
Dann wäre zumindest weniger Verwechslungsgefahr gegeben,
und die Überarbeitung der Library könnte klarer und sauberer dargestellt werden.

Wenn es denn am Ende läuft könnten die Typen einfach mit Rename in den ganzen Files umbenannt werden, falls nötig.
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
962 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: Vordefinierte Delphi-Bezeichner Char & String umdefinieren?

  Alt 2. Mai 2019, 15:29
Delphi-Quellcode:
Type
  Char = AnsiChar;
  String = AnsiString;
Der Compiler (Delphi XE5 Professional) mag das allerdings nicht.
Warum nicht gleich so umbenennen?
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
372 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Vordefinierte Delphi-Bezeichner Char & String umdefinieren?

  Alt 2. Mai 2019, 15:29
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.
Peter Below
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
392 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Vordefinierte Delphi-Bezeichner Char & String umdefinieren?

  Alt 3. Mai 2019, 08:48
Danke für alle Tipps und Hinweise!

Gruß, Andreas
  Mit Zitat antworten Zitat
Rudy Velthuis

Registriert seit: 10. Sep 2011
Ort: Gelsenkirchen
42 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Vordefinierte Delphi-Bezeichner Char & String umdefinieren?

  Alt 3. Mai 2019, 09:12
Danke für alle Tipps und Hinweise!

Gruß, Andreas
Peter Below hat recht. Die Portierung nach Unicode (also UnicodeString statt AnsiString, usw.) lässt sich oft viel leichter erzielen als man denkt. Da wurde alles schon so gemacht, dass man meistens nur neu kompilieren und dann die paar Fehler oder Warnungen die auftreten beseitigen muss. Dann noch testen und voilà!
Rudy Velthuis
  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 +2. Es ist jetzt 14:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf