2009-04-02 7 views
4

Ich habe Quellcode für eine Windows DLL, die in C++ geschrieben ist und Visual Component Library verwendet. Jetzt ist es meine Aufgabe, das auf Linux zu portieren, aber ich habe keinen Quellcode für die VCL selbst oder irgendeine Art von Dokumentation (und ich habe nie mit Borland C++ gearbeitet; in meinen Windows-Tagen habe ich MFC benutzt).Wie portiere ich Code für Borland C++ Builder nach Linux?

Das sollte nicht so schwer sein, da meine DLL keine GUI hat: Soweit ich sehen kann, benutzt sie meistens VCL für Multithreading. Ich bin in eine Klasse gerannt, die von TThread erbt, und dort bin ich steckengeblieben. Ich habe im Internet gesucht, aber bisher keine Dokumentation für VCL gefunden. Ich möchte es vermeiden, ein Buch über Borland C++ Builder zu kaufen, weil ich keine Zeit habe, darauf zu warten, dass es vom Amazon kommt. Ich kann das Paket für Windows nicht kaufen, weil ich bei der Arbeit nur eine Linux-Box habe.

Irgendwelche Vorschläge?

+0

Jetzt ist es vorbei, es lohnt sich zu kommentieren, dass Delphi XE3 und C++ Builder XE3 wahrscheinlich in der Lage sein werden, die IDE zu tarnen (aber nicht auf Linux zu installieren). Sie würden immer noch eine Windows-Box zum Erstellen und Entwickeln benötigen, aber das Erstellen von ausführbaren Linux-Dateien wird wahrscheinlich in einer zukünftigen Version von Delphi oder C++ Builder möglich sein (2012 oder 2013). Diese Frage scheint nur eine Neuimplementierung von TTHread zu benötigen. Aber ich würde vorschlagen, den TThread OUT zu refaktorisieren und durch Boost-Thread-Bibliotheken zu ersetzen. –

Antwort

3

Die VCL ist dokumentiert unter CodeGear's web site. TThread ist insbesondere beschrieben here.

Ich habe die Dokumentation zu den threading-bezogenen Komponenten der VCL als eher spärlich empfunden. This site hat eine viel bessere Beschreibung des Delphi/VCL-Ansatzes zum Threading.

6

Die Boost-Bibliotheken und wxWidgets stellen Analoga für die VCL-Klassen bereit.

+0

Dies ist der richtige Ansatz. Überarbeiten Sie den TThread, ersetzen Sie ihn durch Boost-Threading-Klassen. –

+0

Ich zweite der obige Kommentar. Wenn Embarcadero schlau wäre, hätten sie die neueste Inkarnation ihrer C++ - IDE mit Boost-Bibliotheken erstellt, die sie unterstützen. –

2

Sie können ihre free compiler herunterladen und versuchen, damit zu experimentieren. Es sollte möglich sein, es zumindest unter WINE auszuführen. Vielleicht sogar unter FreeDOS.

Es sollte sich auf die TThread-Klasse in Delphi/Kylix beziehen. Das ist eine andere Alternative, um es zu erforschen. Ich glaube, dass die wichtigsten Methoden run() und sync() waren, aber es ist schon lange her, dass ich es benutzt habe.

Wenn Sie jedoch vorhaben, den Code sauber nach Linux zu portieren, kann es hilfreich sein, die TThread-Klasse mithilfe von Boost-Bibliotheken oder etwas anderem neu zu implementieren.

2

Vor vielen Jahren veröffentlichte Borland eine Version ihrer IDE für Linux, vermarktet als Kylix. Ich bin mir nicht sicher, ob es immer noch unterstützt wird, aber das könnte für Sie der Weg des geringsten Widerstands sein.

5

Sie sollten wissen, dass die von C++ Builder verwendete VCL vollständig in Delphi/ObjectPascal geschrieben ist. C++ - Builder-Anwendungen beinhalten alle C++, die Delphi-basierte Bibliotheken verwenden.

Das Open Source-Projekt FreePascal/Lazarus hat die meisten VCLs (fast das gesamte nicht-visuelle Zeug und vieles visuelle) reverse-konstruiert und läuft nativ unter Linux. Die nicht-visuelle VCL-kompatible Material wird als „Free Component Library“ („FCL“) bekannt http://www.freepascal.org/ http://www.freepascal.org/fcl/fcl.var

Die Quelle der TThread Implementierung in der FCL sollte ausreichen, leicht zu finden sein.

Eine Option wäre das Umschreiben in FreePascal, wo die Sprache in ObjectPascal geändert würde, aber die Aufrufe an die VCL und die Verwendung von VCL-Komponenten praktisch identisch wären.

Eine andere Option könnte sein, nach C++ unter Linux zu portieren und irgendwie FreePascals VCL aus C++ zu benutzen. Ich bin mir nicht sicher über die Praktikabilität/Machbarkeit davon. Jemand in FreePascals Foren sollte dazu in der Lage sein, das zu beantworten.

Eine andere Option, die jemand erwähnt hat, wäre nur das Umschreiben mit einer anderen Threading-Bibliothek.

1

Es gibt mehrere Bibliotheken, die Frameworks wie Threading z. Boost (www.boost.org) oder ACE (http://www.cs.wustl.edu/~schmidt/ACE.html)

Es sollte ziemlich einfach sein, den Code für die Verwendung einer dieser Threading-Infrastrukturen zu portieren.

Verwandte Themen