Reales Beispiel "ATBinHex"
Als reales Beispiel für eine Übersetzung von Delphi-Quellcode nach C++ wurde die exzellente ATBinHex-Komponente von Alexey Torgashin ausgewählt. ATBinHex ist eine Komponente zum schnellen betrachten von Textdateien mit vielen Anzeigeoptionen. U.a. kann zwischen Text-, Binär- Hexadezimal- und Unicode-Modus umgeschaltet werden.
Mittlerweile scheint keine offizielle Seite zum Download dieser Komponente mehr zu existieren, sie ist aber weiterhin über verschiedene Downloadportale verfügbar. Der Originalcode ist auch in der zip-Datei dieses Übersetzungsbeispiels enthalten.
Das ATBinHex Beispiel herunterladen
Delphi Demoanwendung
Eine vereinfachte Demo-Anwendung wurde erzeugt, die nicht von weiteren Komponenten abhängt, wie das Originaldemo von Alexey Torgashin. Außerdem ist es nicht nötig, die Komponente vor dem Compilieren der Anwendung zu installieren. Der übersetzte C++ Code ist wenig getestet, so dass bei einer Installation Vorsicht angebracht ist.
Das Demo in der Delphiversion befindet sich im Ordner "ATBinHexSource". Es wurde mit der BDS 2006 erstellt. Im Unterverzeichnis Source befindet sich der originale Quellcode von Alexey Torgashin in der Version 2.7.
CBuilder-Version
Der Delphi-Code wurde mittels der VCL des CBuilder 6 übersetzt, aber das Projekt wurde für den CBuilder 2009 erzeugt. Die Verwendung des übersetzten Codes mit dem CBuilder 6 hätte mit zusätzlichen Schwierigkeiten zu kämpfen, weil dort WideStrings und der __int64-Typ nur schlecht unterstützt werden.
Delphi2Cpp-Projekt
Der Project-Ordner entspricht dem gleichnamigen Ordner von Delphi2Cpp. Darin befinden sich die Dateien, die Delphi2Cpp verwendet, um den Quellcode zu übersetzen:
Project/
ATBinHex.prj Delphi2Cpp Optionen zur Übersetzung des ATBinHex-Codes ATBinHex.txt Liste der Bezeichner, die in ATBinHex.prj eingeschlossen wird
Stadien der Übersetzung
Verschiedene Stadien der Übersetzung sind in folgenden Ordnern zu finden:
MadeCpp/ | das unmodifizierte Resultat der Übersetzung mit Delphi2Cpp 1.5.1 |
MadeCompile/ | der zum Kompilieren gebrachte C++-Code |
MadeRun/ | der zum Laufen gebrachte C++-Code |
C++Builder-Projekt
Das Projekt für den C++Builder 2009 befindet sich in dem Ordner "ATBinHexExe2009".
ATBinHexCpp | Eine Kopie des Ordner "MadeRun" (siehe oben) |
ATBinHexExe.cbproj | C++Builder 2009 Projektdatei |
ATBinHexExeCpp | Datei für "WinMain" |
main.h/.cpp/.frm | Programmoberfläche |
Weiter befinden sich in dem Ordner Kopien der Dateien von ../Delphi2Cpp/Source/CBuilder.
d2c_systypes.h
d2c_system.h
d2c_system.cpp
d2c_sysmath.h
d2c_sysmath.cpp
d2c_sysfile.h
d2c_sysfile.cpp // hier nicht gebraucht
Diese Dateien der Demo Version 1.5.1 von Delphi2Cpp sind ergänzt um die hier benötigten Funktionen: Assert, Inc, SetString, Sqr.
Resultat
Es wäre leicht, durch geeignete Auswahl und Modifikationen von Quellcode perfekte Übersetzungsergebnisse zu erzielen. In diesem Test hingegen war es Ziel eine objektive Einschätzung der Übersetzungsleistung von Delphi2Cpp zu erlangen. Daher wurde versucht den unmodifizierten im Internet erhältlichen Quellcode möglichst gut zu übersetzten.
Diese Übersetzung wurde erstmals im Mai 2010 mit Delphi2Cpp 1.3.0 gemacht. Damals lautete das Resultat: ca. 7500 Zeilen Delphi-Quellcode wurden übersetzt. Im erzeugten C++-Code mussten weniger als 100 Zeilen Code nachbearbeitet werden. Im Januar 2011 mit Delphi2Cpp 1.4.0 war die Anzahl der nötigen Nachbesserungen auf 34 verringert. Aktuell im September 2011 mit Delphi2Cpp 1.5.1 sind 24 Änderungen nötig. 10 Änderungen sind einfache Ersetzungen des Ausdrucks "Classes__0" durch "Classes__1". Diese Differenz ergibt sich aus dem Umstand, dass die C++ Version der VCL des C++Builders nich mit Delphi2Cpp generiert ist. Die Zählweisen ändern sich mit jeder Version des C++Builders.
Um den compilierbaren Code lauffähig zu machen, war schließlich nur eine einzige Korrektur nötig.
Delphi2Cpp Version | Datum | Anzahl Nachbesserungen |
---|---|---|
Delphi2Cpp 1.3.0 | Mai 2010 | < 100 |
Delphi2Cpp 1.4.0 | Jan 2011 | 34 |
Delphi2Cpp 1.5.1 | Sept 2011 | 24 |
english
Letzte Neuigkeiten |
28.10.24
Delphi2Cpp 2.5: in Groß- und Kleinschreibung mit Deklarationen übereinstimmende Symbolnamen [more...] |
08/26/24
Delphi2Cpp 2.4: Aktualisiert auf RAD Studio 12.1 Athen [more...] |
[aus Fallstudie...] "Eine Meisterleistung -- Delphi2Cpp hat alle meine Erwartungen weit übertroffen." Tony Hürlimann
virtual-optima
29.08.2011
|
"Ich muss mich nochmal für deinen Einsatz und die Qualität deiner Arbeit bedanken, das ist absolut überdurchschnittlich ..." Gerald Ebner
Significant Software
22.01.2010
|
Diese Homepage ist aus einfachen Texten mit [Minimal Website ]generiert.
|
Minimal Website ist mit Hilfe des TextTransformers hergestellt.
|
Der TextTransformer ist gemacht mit dem Borland
CBuilder
|