Ich habe eine Anwendung in Delphi geschrieben, die in Delphi 2007 kompiliert. Ich denke, es wurde ursprünglich in Delphi 7 geschrieben.
Wie auch immer, ich muss den gesamten Nicht-GUI-Code in C ++ konvertieren, weil ich eine Mac-Version der Software veröffentlichen möchte.
Was ist der beste Weg, dies zu tun? Irgendwelche Abkürzungen, die ich nehmen kann, um den Prozess zu beschleunigen?
EDIT: Der Code kompiliert zu nativem Code, nicht .NET.
Warum nicht einfach einen OS X Delphi Compiler? Free Pascal behauptet, Delphi unter OS X zu unterstützen (obwohl es kein Pascal-Codierer ist, habe ich es nicht ausprobiert).
Einfache Antwort: Sie können nicht-trivialen Delphi-Code einfach nicht ohne vollständiges Neuschreiben in C ++ portieren. Das Objektmodell von C ++ unterscheidet sich stark von Delphi. Es hat keine Basisklasse wie TObject, von der alle anderen Objekte abgeleitet sind, und es fehlt Unterstützung für viele der RTTI-Sachen, die Delphi-Code oft für selbstverständlich hält. Und es gibt keine einfache Möglichkeit, Delphi RTTI in C ++ neu zu implementieren, da eine Menge davon auf der Compiler-Ebene ausgeführt wird, und vieles davon basiert auf der Tatsache, dass alle Delphi-Klassen von TObject abstammen.
C ++ bietet auch keine Unterstützung für das Konzept der initialization und finalisation Abschnitte, die in Delphi so häufig vorkommen, und das, was es stattdessen hat, ist sehr kaputt. (Sieh dir das "statische Auftragsinitialisierungsfiasko" für alle blutigen Details an.)
Delphis Exception-Behandlung ist auch viel fortgeschrittener als C ++. Ein Teil davon ist das Objektmodell und ein Teil seiner Compilermagie. Darüber hinaus unterstützt C ++ das try-finally -Konstrukt nicht.
Wenn Sie ein Delphi-Projekt auf den Mac portieren möchten, ist Free Pascal die beste Lösung. Es ist nicht 100% kompatibel mit Delphi, aber es ist gut genug für viele Dinge, und Sie haben ausdrücklich erwähnt, dass Sie die Delphi GUI-Sachen nicht portieren müssen. AFAIK der GUI-Bereich ist die Quelle der meisten Kompatibilitätsschwächen von FPC, wenn das nicht notwendig ist, ist FPC wahrscheinlich ziemlich nah am Ideal für Ihre Bedürfnisse, zumindest bis CodeGear einen OSX-Compiler herausbekommt. (Was nicht offiziell angekündigt wurde, aber basierend auf verschiedenen Dingen, die gesagt wurden, ist es nicht unvernünftig anzunehmen, dass eines irgendwann nächstes Jahr verfügbar sein wird.)
Um Ihren Code von Delphi nach Cpp zu konvertieren, sehen Sie sich
anСсылка .
Ich habe dies verwendet, um einige der Klassen und Funktionen in SysUtils, DateUtils und StrUtils mithilfe von wxWidgets-Funktionen zu konvertieren. Wenn Sie planen, wxWidgets für C ++ zu verwenden, schauen Sie sich Ссылка an, das die gesamte konvertierte Quelle enthält.
>Wenn Sie Mac OS X Anwendungen direkt entwickeln wollen, dann schauen Sie sich wxForms für Delphi an - Ссылка
Ich denke, das wäre mechanisch schwer zu bewerkstelligen, also schauen Sie sich wahrscheinlich ein komplettes Neuschreiben an. Eine Sache, die zu beachten ist, ist, dass Delphi in der Regel try ... finally-Strukturen für das Ressourcenmanagement verwendet, während C ++ eine Technik verwendet, die als RAII (Ressourcenakquisition ist Initialisierung) bekannt ist. Sie sollten diese und andere C ++ - Idiome lesen, bevor Sie die Konvertierung versuchen.
Wenn Ihr Code in Delphi 2007 in .NET-Assemblies kompiliert wird, haben Sie möglicherweise eine viel einfachere Option als zu versuchen, von Delphi's Objekt pascal nach C ++ zu portieren.
Sie könnten Ihre Logik möglicherweise in .NET-Assemblys (und vielleicht sogar Teile der Benutzeroberfläche) kompilieren und Mono verwenden, um sie auf dem Mac auszuführen. Sie könnten eine benutzerdefinierte GUI um Mono erstellen oder sogar eine einzelne, plattformunabhängige Anwendung erstellen.
Der "korrekte" Weg dazu ist, es in Objective C umzuschreiben. Ich finde Objective C etwas komisch, aber es gibt viele Ähnlichkeiten mit Delphi in der Art, wie Objekte sich verbinden und delegieren.
Sie können möglicherweise Free Pascal verwenden, um es schneller zu machen, aber Sie sollten ernsthaft über eine Neuschreibung nachdenken.
Ich würde mich in Embarcadero verliebt haben, wenn sie eine Mac OS X-Version von Delphi veröffentlichen könnten, die nicht, wie Kylix, saugte. Man kann träumen.
Bearbeiten: Es ist ein großer Vorteil, in Delphi zu bleiben und eine separate Version für den Mac in Objective C zu haben. Erstens bedeutet das, dass Sie die Version unter Windows nicht neu schreiben müssen und die (vermutlich) Jahre davon verlieren Investition in Delphi-Code. Zweitens funktioniert die Mac-Software anders als Windows aus der Sicht der Benutzeroberfläche. Ein einfacher Port des Produkts ist unpassend und zwingt den Entwickler, die großartigen nativen Funktionen von Windows und Mac zu nutzen. Siehe: Ältere Versionen von MS Word für Mac oder iTunes für Windows. Sie sehen aus und fühlen sich falsch.
Sie können auch Delphi Prism verwenden. Es ist für .NET, aber es ist der letzte Ausdruck in Delphi Sprachspezifikation. Es unterstützt auch Mac OSX (siehe den Link). Auch die Entwickler von CodeGear / EMBT arbeiten an einem neuen Compiler sowie an einer neuen Version von Delphi, die voraussichtlich im April in die Beta-Version gehen und die Lücke zwischen Prism und RAD Studio schließen wird. Sehen Sie ihre 'Beta-Programme' Seite.