5 Stimmen

Projekt von Delphi 3 nach Delphi 2010 verschieben

Ich wurde gebeten, ein Projekt, das ich 1998/99 in Delphi 3 geschrieben habe und das seither stabil läuft, wieder zu öffnen. Ich habe die Delphi 3-Codebasis auf einem veralteten Windows 98-Rechner, der nur existiert, um dieses Projekt am Leben zu erhalten. Natürlich möchte ich die Quellcodebasis in das 21. Jahrhundert bringen, bevor ich größere Überarbeitungen vornehme.

Ich stelle erfreut fest, dass Delphi 2010 (ich benutze derzeit 2007) angeblich in der Lage ist, Projekte ab Delphi 2 zu importieren. Hat jemand Erfahrung mit dem Import von großen Projekten aus Delphi 3? Kann ich davon ausgehen, dass dies ein einfacher oder ein schwieriger Übergang sein wird?

Darüber hinaus verwendet das ursprüngliche Projekt Komponenten von Drittanbietern wie DBISAM, WPTools und TMS Planner. Ich stelle fest, dass alle diese Komponenten auch in der neuesten Version von Delphi verfügbar sind. Angenommen, ich installiere zuerst die neuen Versionen in Delphi 2010, kann ich dann erwarten, dass die Teile meiner Anwendung, die diese Komponenten verwenden, ebenfalls übersetzt werden? Ich weiß, dass zumindest WPTools einige seiner Komponentenstrukturen und -schnittstellen seit der in der ursprünglichen Anwendung verwendeten Version geändert hat, und natürlich werde ich dort einige Umcodierungen vornehmen müssen, aber wird der Ausfall dieser Teile des Programms verhindern, dass meine Codebasis überhaupt aktualisiert wird?

6voto

skamradt Punkte 15128

Es sollte sehr gut möglich sein, diese Migration durchzuführen, und je nachdem, wie Ihr Code geschrieben ist, kann es entweder schmerzhaft oder schmerzlos sein. Leider lässt sich das nicht so einfach sagen, bis Sie mit dem Migrationsprozess beginnen.

Als Erstes würde ich dafür sorgen, dass ALLE DFM-Dateien in ihre Textdarstellung konvertiert werden. Ich glaube, dies wurde in späteren Versionen von Delphi standardmäßig eingestellt, aber wenn ich mich recht erinnere, verwendete Delphi 3 ein Binärformat. Es sollte eine Dienstprogrammdatei mit dem Namen DFMConvert oder so ähnlich im Delphi 3-Bin-Verzeichnis geben, mit der man eine DFM-Datei in Text konvertieren kann. Der Grund dafür ist, dass Sie die Quelle lesen können, wenn Sie die DFM von Hand bearbeiten müssen, weil eine Komponente nicht geladen wird. Sie springen nicht nur zwischen den Versionen von Delphi, sondern auch zwischen den Versionen ALLER Komponenten, die Sie verwenden, und es kann einige Inkompatibilitäten geben, die dazu führen können, dass eine Komponente nicht geladen werden kann. Wenn dies der Fall ist und Sie eine "neue" Version haben, sollten Sie den DFM-Quellcode direkt bearbeiten und ein Testformular mit der Komponente darin mit der alten Version vergleichen. Entfernen Sie alles (oder benennen Sie es um), was nicht an der richtigen Stelle ist, und versuchen Sie dann, das Formular erneut zu laden.

Wie Frabricio bereits erwähnte, müssen Sie bei der Verwendung von Varianten geringfügige Anpassungen an Ihrer Verwendungsklausel vornehmen.

Die gute Nachricht ist, dass Ihr Code selbst gut funktionieren sollte, sobald Sie die Komponenten/Verwendungs-Klausel korrigiert haben. Wenn Sie direkt zu Delphi 2010 gehen, wäre Ihr einziges anderes Problem Unicode und der Compiler macht eine fantastische Arbeit, alle von ihnen darauf hinweisen, über Fehler und Warnungen.

5voto

Fabricio Araujo Punkte 3938

Da Sie D2007 haben und davon ausgehen, dass alle diese Komponentensätze auch mit D2007 dcus kommen, werde ich rate ich Ihnen, die Codebasis zunächst unter D2007 neu zu öffnen. Und danach gehen Sie zu D2010 wegen der Unicode-Funktion der aktuellen VCL - was einige Migrationsprobleme verursachen kann (die ich hier nicht erörtern werde, weil sie im Web ausführlich diskutiert wird und hier auf SO ).

Ich würde sagen, dass zwischen D5 und D7 (ich weiß es nicht genau) eine Umstrukturierung des rtl stattfand (mit der Schaffung der Einheit Variants.pas und vielen OTAPI-Einheiten, die ihre Namen änderten usw.). Hier werden also die ersten Probleme auftreten. EDIT:Nicht nur die Variants wurden verlagert, sondern auch viele IDE-Integrationen - um zu verhindern, dass nicht lizenzierter Code eingesetzt wird. Wenn Sie OTAPI-Code haben (z. B. Code, der die Veröffentlichung von Eigenschaften auf vererbten Formularen ermöglicht), müssen Sie ihn in ein Paketprojekt verschieben.

Als skramradt sagte, müssen Sie sich möglicherweise mit dem binären DFM-Ding befassen....

Danach, wenn alles funktioniert, gehen Sie zu der Unicode-Sache über. Je nach Anwendung kann das einfach sein oder nicht. Für meine ist es kein großes Ärgernis. Aber ich weiß, dass es andere gibt, die größere Probleme damit haben als ich.

4voto

Martin Girling Punkte 41

Hier sind einige Hinweise, die wir für das Upgrade auf Delphi 2010 gemacht haben

  1. Die in Delphi2010 kompilierten ausführbaren Dateien sind etwa dreimal so groß wie die von Delphi3 kompilierten.
  2. Jede Kompilierung führt zu einem ganzen Haufen mehr Warnungen und Hinweisen als Delphi3. Eine gute Praxis ist es, alle Hinweise und Warnungen zu entfernen.
  3. Ich habe mehrere beschädigte Pascal-Dateien gefunden, die sich gut in Delphi3 kompilieren lassen, aber nicht in Delphi2010. Optisch scheint es keine Probleme oder Unterschiede zu geben. Jedoch Kompilierungsfehler zeigen deutlich den Fehler auf die falsche Zeilennummer. In meinen Beispielen war das Problem mit CR/LF verbunden, in meinem Delphi gab es nur ein CR. Ein schwer zu lösendes Problem und ein echter Zeitfresser. Der Text kann jedoch in Notepad oder mit WinHex.exe angezeigt werden. Ich habe ein Programm namens PARSER.EXE geschrieben, mit dem diese Steuerzeichen erkannt werden können. Dies ist der beste Weg, um diese Dateien in Notepad zu bearbeiten, wenn man weiß, wo die Steuerzeichen sind.
  4. AnsiString. Delphi 2010 verwendet jetzt AnsiStrings, MBCS und WideStrings, (UniCode). Im Gegensatz zu Delphi 3, das ASCII-Strings verwendete. Die Standardimplementierung von Delphi 2010 verwendet Strings als Unicode und Chars als 16-Bit-Zeichen. Es muss nun sichergestellt werden, dass viele 8-Bit-ASCII-Strings als AnsiStrings definiert sind. Offensichtlich benötigen ältere DLLs, deren Schnittstellen mit PChars definiert waren, jetzt PAnsiChar.
  5. Der Code ist aus den folgenden Gründen nicht zwischen den Delphi-Plattformen austauschbar
  6. Delphi 2010 hat zusätzliche Funktionen und Variablentypen wie AnsiChar, AnsiStrings.
  7. Die Formulare sind zwischen den Versionen nicht kompatibel, da neuere Delphi-Versionen zusätzliche Eigenschaften haben.
  8. Die dcus sind zwischen den Versionen nicht kompatibel.
  9. Die Pakete sind zwischen den Versionen nicht kompatibel. Crystal Reports ist in Delphi 2010 nicht enthalten, daher müssen Sie es möglicherweise separat erwerben. Alle anderen Pakete, die verwendet wurden, müssen möglicherweise ebenfalls kostenpflichtig aktualisiert werden.
  10. Viele Funktionen, wie z.B. Readfile, Writefile, GettickCount bestehen jetzt auf Parametern als DWORDs, während Delphi3 toleranter war. Einige dieser Funktionen sind mit höheren Festplattenkapazitäten verbunden.
  11. Popup-Menüs. Diese haben eine neue Eigenschaft namens AUTOHOTKEY. Diese sollte auf manuell eingestellt werden. Wenn dies als Standard eingestellt ist, werden die Beschriftungen mit '&' eingefügt, um eine Hotkey-Funktionalität zu bieten.
  12. Cursors. Die Methode zur Verwendung von Cursorn hat sich geändert.
  13. Es hat den Anschein, dass Delphi2010 einen ganzen Haufen neuer Funktionen hat, die auf Kosten der Benutzerfreundlichkeit hinzugefügt wurden. Wahrscheinlich hatte Delphi 3 eine bessere und einfacher zu bedienende Schnittstelle.
  14. Hilfe. Vielleicht besser als Delphi 3. Aber es scheint für einige Minuten zu verschwinden, wenn man versucht, Hilfeinformationen zu finden. Die interaktive Hilfe ist ein Ärgernis.
  15. BorlandMM.dll funktioniert nicht unter Windows 2000 mit Delphi 2010-Anwendungen. Sie müssen also möglicherweise eine Reihe von PCs aktualisieren, wenn Sie diese dll verwenden möchten.

Ich habe etwa 100 Anwendungs-DLLs und COM-Server zu aktualisieren. Wahrscheinlich etwa 12 Wochen Arbeit mit Inbetriebnahme. Hoffentlich hilft das.

3voto

lkessler Punkte 19628

Nur um Sie zu beruhigen: Ich habe vor kurzem die Software, die ich entwickle, von Delphi 4 auf Delphi 2009 umgestellt, um Unicode-Fähigkeiten zu erhalten, und ich hatte eine Reihe von Problemen, aber sie waren alle innerhalb von ein paar Wochen lösbar.

Eine Sache zu beachten: Wenn Sie Pakete von Drittanbietern verwenden, stellen Sie sicher, dass sie eine Delphi 2010-Version zur Verfügung haben, auf die Sie vor der Konvertierung aktualisieren können. Delphi 2009 wäre in Ordnung, aber ich würde nicht versuchen, ältere Pakete in D2010 zu verwenden.

1voto

SharkMan Punkte 11

Ich kann nicht viel über die Migration von D3 nach D2010 sagen, aber ich habe kürzlich D6 erfolgreich nach D2010 migriert. Zu Beginn habe ich sichergestellt, dass alle Komponenten von Drittanbietern, die Sie in D3 verwendet haben, auch in D2010 verfügbar sind. Rekompilieren Sie alle selbst erstellten Komponenten von D6 nach D2010. Ich lud meinen D6-Quellcode und kompilierte. Behandeln Sie alle Unicode-Probleme. Alle Compiler-Fehler einen nach dem anderen behandeln... alles in etwa 3 Tagen erledigt (ca. 30000 Zeilen Code)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X