Auf deutsch anzeigenDisplay in English

 

:: Home  :: Sitemap  :: Downloads  :: Shop  :: Impressum  :: Newsletter

:: Produkte  :: Support  :: dataweb

Support

:: NEWS :: Mit NShape können Entwickler MS Visio-ähnliche Funktionalität in Ihre Anwendungen integrieren. NShape ist Open Source und speziell für industrielle Anwendungen gemacht. Mehr...

Support-Optionen ::
Häufig gestellte Fragen ::
Produktdokumentation ::
Ergänzendes Material ::
Diskussions-Forum ::
NShape Feedback ::
Partner ::
Service-Releases ::
Artikel ::
Datenbank- und SQL-Links ::
ISAPI-Links ::

Delphi-Applikationen nach Kylix portieren

Die sieben häufigsten Probleme bei der Migration und wie man sie lösen kann

Niemals war es leichter, Anwendungen mit grafischer Benutzeroberfläche von Windows nach Linux zu portieren. Da die in Kylix verwendete CLX-Programmbibliothek der VCL so ähnelt, ist die Arbeit in einigen Fällen innerhalb von Minuten erledigt. Die meisten Programme jedoch benötigen dann doch einiges an Arbeit. Dieser Beitrag behandelt die üblicherweise auftretenden Schwierigkeiten und zeigt, wie man damit umgeht.

1. Dateinamen

Das erste Problem, auf das Sie stoßen werden sind Linux Dateinamen. Hier ist es ein Unterschied, ob es MyUnit, myunit oder Myunit heißt, und Kylix erwartet, dass Sie den Bezeichner korrekt schreiben. Und zwar sowohl in der unit- als auch in der uses-Anweisung. Die Wahrscheinlicht steht gut, dass Sie Ihre Pascal-Dateien auf dem File-Server umbenennen müssen, wenn Sie nicht für immer und ewig mit sorglos getippten Datei- und Unit-Namen leben wollen. Für den NetWare 4-Server, der bei uns im Büro steht, ist das ein Problem. Er will es einfach nicht zulassen, dass eine Datei Test heißt und ändert den Namen immer wieder nach TEST, wenn der Zugriff über Windows erfolgt. Also haben wir ein kleines Kylix-Programm geschrieben, das alle Pascal-Dateien über den Samba-Server umbenennt. Das läuft nun jedes Mal, wenn Kylix einen falsch geschriebenen Dateinamen meldet.

2. Nochmal: Dateinamen

Wenn Ihre Anwendung mit Dateinamen arbeitet (und welche tut das nicht?), müssen Sie sich auf die Suche machen: Nach allen als Pfad-Begrenzer verwendeten Backslashes, nach Groß- und Kleinschreibung in Dateinamen und Extensionen, sowie nach Laufwerks-Angaben. Es gibt ja schon lange Funktionen wie ExtractFileName in SysUtils, die nun auf beiden Plattformen korrekt arbeiten, aber nicht jeder benutzt sie. Weitere Hilfsfunktionen sind unter Windows allerdings erst ab Delphi 6 verfügbar, so z.B. IsPathDelimiter und IncludeTrailingPathDelimiter. Auf Linux-Systemen ist es außerdem wohl keine so gute Idee, zwei Dateinamen mit CompareText zu vergleichen.

3. Units

Die Dateinamen der CLX-spezifischen Units beginnen mit Q. Q steht für Qt, die grafische Bibliothek von Troll Tech, auf der VisualCLX aufsetzt. Die CLX Formular-Klasse befindet sich in QForms, aus Controls wird QControls usw. Wir benutzen das Compiler-Symbol LINUX, um zwischen den Versionen umzuschalten:

uses
  {$ifdef LINUX}
  QForms, QControls, QStdCtrls,
  {$else}
  Forms, Controls, StdCtrls,
  {$endif}
  System, SysUtils;  

Beachten Sie dabei bitte, dass mindestens noch eine gemeinsame Unit hinter dem endif steht. Wenn Sie das Semikolon direkt hinter QStdCtrls und StdCtrls schreiben, kommt die IDE von Zeit zu Zeit auf die Idee, weitere Units innerhalb des ifdef einzufügen.
Diese Vorgehensweise weicht etwas von dem ab, was Borland empfiehlt. Um zukünftige weitere Plattformen zu unterstützen, wird folgende Konstruktion vorgeschlagen:

uses
  {$ifdef LINUX}
  QForms, QControls, QStdCtrls,
 {$endif}  {$ifdef MSWINDOWS}
  Forms, Controls, StdCtrls,
  {$endif}
  System, SysUtils;  

Leider ist das Symbol MSWINDOWS erst ab Delphi 6 definiert, so dass wir uns trotzdem für die erste Variante entschieden haben.

4. Formular

Jawohl, Sie können Delphi-Formulare auch unter Kylix verwenden. Es ist nur leider keine gute Idee, das auch zu tun. Wenn Sie ihre Formulare unter Delphi im Binärformat speichern (den Menüpunkt Text DFM im lokalen Menü des Formular-Designers ausschalten), können sie mit Kylix geöffnet werden. Allerdings werden Sie wahrscheinlich am Layout der Steuerelemente nicht viel Gefallen finden, dieses scheint unter Kylix etwas anders zu arbeiten. Also müssen Sie es abändern.

Außerdem fehlen CLX-Steuerelementen einige der Eigenschaften Ihrer Gegenstücke aus der VCL. Dann gibt es da unterschiedliche Werte für Aufzählungstypen, andere Bezeichner für Schriftarten, zusätzliche Eigenschaften. Insgesamt sind es nicht so viele Unterschiede, aber die wenigen genügen. Speichern Sie ihre Kylix-Formulare lieber in einer eigenen Datei ab und benutzten Sie die Standard-Endung xfm für diese Files.
Unsere Vorgehensweise sieht so aus:

  1. Formular unter Delphi 5 binär abspeichern
  2. Für die Verwendung unter Kylix *.dfm-Datei in eine *.xfm-Datei kopieren
  3. Die Ressourcenanweisung {$R *.DFM} im Pascal-File des Formulars ändern in
    {$ifdef LINUX}
    {$R *.xfm}
    {$else}
    {$R *.dfm}
    {$endif}
  4. Das Formular unter Kylix öffnen und die Anordnung der Steuerelemente an Linux anpassen

Auf diese Weise können Sie zwar vorhandene Formular unter Kylix weiterverwenden, müssen aber zwei Kopien der Formulardatei pflegen. Meiner Meinung nach ist das das beste, was Sie derzeit tun können. Unter Delphi 6 wird auch Ihre Windows-Anwendung eine CLX-Applikation sein können, was der Kompatibilität sicher nur gut tut.

5. Windows API Funktionen

Zu Windows API-Funktionen gibt es nur eines zu sagen: Lebwohl. Auch wenn die Kylix-IDE auf Wine aufsetzt, um unter Linux lauffähig zu sein, tun Kylix-Anwendungen das nicht. Deshalb müssen Sie alle solchen Funktione eliminieren:

  1. Ersetzen Sie Windows API-Funktionen durch Delphi-Funktionen oder -Komponenten, wo immer es möglich ist. Das geht z.B. für die allermeisten Datei-Verwaltungs-Routinen und für Ini-Dateien. Diese sind im Gegensatz zur Registry Kylix-kompatibel.
  2. Wo dies nicht möglich ist, schreiben Sie eine Wrapper-Funktion, um mithilfe des Symbols LINUX zwischen Windows und Linux-Version umzuschalten. Das haben wir z.B. für Sleep und LockFile gemacht. Die Linux Systemfunktionen sind in der Unit Libc zu finden.

6. VCL Komponenten

Die gute Nachricht ist, dass es für die meisten üblicherweise benutzten Steuerelemente und Komponenten eine CLX Version gibt. So z.B. für TEdit, TStringGrid, TListView, TTimer. Aber die meisten sind nicht alle und Sie werden beispielsweise nach einem Ersatz für TRichEdit vergeblich suchen. Dieses Control basiert nämlich auf einer mit Windows ausgelieferten Microsoft-Bibliothek. Es gibt in Kylix zwar zwei neue Komponenten namens TTextViewer und TTextBrowser, diese beschränken sich jedoch auf das Anzeigen und können den Inhalt nicht editieren.

Wenn ein von Ihnen benötigtes Steuerelement nicht verfügbar ist, können Sie nicht viel tun. Entweder gelingt es Ihnen, ohne es auszukommen, oder Sie warten, bis ein Komponentenhersteller die Marktlücke füllt oder Sie entwickeln es selbst.

7. Datenbank-Komponenten

Da Borland die BDE unter Linux nicht unterstützt, müssen Sie TTable, TQuery, TDatabase und TSession in Ihrer Kylix-Palette verzichten. Falls Ihre Anwendung diese Komponenten benutzt, gibt es drei Alternativen, über die Sie nachdenken sollten:

  1. Benutzen Sie MyBase. MyBase ist eine Art von Datenbank-Ersatz und beruht auf XML-Dateien, die mit einem TClientDataSet geschrieben und gelesen werden. Weil MyBase keine Index-Dateien kennt und den konkurrierenden Datenzugriff mehrerer Benutzer nicht unterstützt, kann es nur für Einzelplatzanwendungen mit sehr kleinen Datenbank-Tabellen eine Lösung sein.
  2. Benutzen Sie dbExpress und greifen Sie auf einen Datenbank-Server zu. dbExpress ist die neue, schlanke Datenbank-Zugriffsschicht von Borland, die auch in Delphi 6 integriert sein wird. Kylix wird mit dbExpress-Treibern für MySQL und Interbase (Desktop Developer Edition) sowie Oracle und DB2 (Server Developer Edition) ausgeliefert. Nachteil: Die Architektur Ihrer Anwendung wird erheblich komplexer, Ihr Kunde muss einen Datenbank-Server installieren und warten, große Teile Ihres Quellcodes müssen angepasst werden.
  3. Benutzen Sie einen BDE-kompatiblen Ersatz. Es gibt etliche Datenbank-Engines für Windows auf dem Markt, die als Ersatz für die BDE geeignet sind. Auch eine plattform-übergreifende Lösung für Windows und Linux ist schon verfügbar. Mit dieser müssen Sie zwar Ihre BDE Tabellen-Dateien konvertieren. Sie können aber die Architektur Ihrer Anwendung beibehalten, haben nur minimale Quellcode-Änderungen und Ihr Kunde kriegt noch nicht einmal mit, dass Ihre Anwendung eine Datenbank benutzt (http://www.dataweb.de/de/turbodb/index.html).

Natürlich gibt es zum Thema Portierung noch einige Themen mehr, wie Online-Hilfe oder eingebetteter Assembler-Code. Ich glaube aber, dass Sie auf die hier abgehandelten Punkte als erstes stoßen. Damit gibt dieser Beitrag einen guten Vorgeschmack darauf, was Sie bei einer Portierung von Delphi-Applikation nach Kylix erwartet.

Der Autor ist Diplom-Physiker und arbeitet seit über 15 Jahren als Coach, Software-Architekt und Verfasser von Fachartikeln. Er hat im Jahre 1998 die dataweb GmbH gegründet, welche Software-Tools für Datenbankentwickler erstellt und vertreibt. Das aktuelle Projekt von dataweb ist eine Multi-User-Datenbank-Komponente für Kylix. Der Autor freut sich über Anmerkung zu diesem Artikel an peterDOTpohmannADDdataweb.de.