Bei der Portierung von Delphi nach Kylix ensteht oft das Problem, dass Windows API Funktionen unter Kylix nicht Verfügbar sind. Einige dieser Aufrufe sind in dem Projekt MicroWindows nach programmiert.
An dieser Stelle soll nun gezeigt werden, wie diese Bibliothek mittels Kylix genutzt werden kann. Mit ähnlicher Vorgehensweise sollte es möglich sein, jede andere Shared Bibliothek in Kylix einzubinden.
Zur Funktionsweise ist zu folgendes zu sagen. Das Projekt MicroWindows wird so konfiguriert, dass Shared Libraries
erstellt werden. Diese werden dann noch mit einigen anderen Linux Standard Bibliotheken zu einer großen zusammen gebunden.
Dies geschieht, um unresolved symbol ...
zu vermeiden.
In Kylix müssen die gewünschten Funktionen nun definiert werden, Das geschieht ähnlich der Deklaration externer DLL Aufrufe unter Delphi.
Noch einige Änderungen an den Suchpfaden für Bibliotheken und die Aufrufe sollten unter Kylix laufen.
Am Anfang (wie so oft) muss MicroWindows herunter geladen werden. Das erfolgt beispielsweise von microwindows.censoft.com. Nach dem Entpacken des Packetes (/usr/src/packages/SOURCES/), müssen folgende Änderungen durchgeführt werden:
in die Datei Makefile.rules folgende Einträge einfügen:
SHAREDLIBS=Y
OBJFRAMEWORK=Y
in die Datei Makefile folgenden Eintrag einfügen:
CFLAGS += -ansi -pedantic -Wall
WinMain in Zeile 60 in der Datei
./src/mwin/winmain.c auskommentieren.
Nun kann MicroWin mit make übersetzt werden. Es sollten keine Fehler auftreten.
Das Demo-Projekt herunter laden und entpacken.
Die darin befindliche Datei makelib nach .../microwin-0.89/src/lib kopieren und ausführen. Das Script linkt alle benötigten Bibliotheken in das aktuelle Verzeichnis, kopiert einige Bibliotheken nach /usr/lib und erstellt eine Bibliothek namens libmicrowin.so.
Die Bibliothek wird noch auf unresolved symbols
überprüft, die hoffentlich nicht vorhanden sind.
Falls es doch Symbole auftreten, die nicht aufgelöst werden können, so muss die Bibliothek, in der die Funktion
definiert ist, gefunden und eingebunden werden.
Der Befehl readelf -s name.so listet alle Symbole einer Bibliothek auf.
Das Demo Projekt kann nun in Kylix geöffnet werden.
Damit das Programm unter Kylix läuft muss unter Project/Options/Pathes zum /usr/lib zum SearchPath inzugefügt werden.
Um das Pragramm ausserhalb von Kylix aufzrufen starten Sie es wie folgt:
export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/usr/local/kylix3/bin/ && ./Project1
ODER (besser)
fügen Sie in die Datei /etc/ld.so.conf die Zeile /usr/local/kylix3/bin ein. Anschliessend muss ldconfig ausgeführt werden.
Das Projekt kann jetzt kompiliert und gestartet werden.
Das Programm macht nichts weiter als eine Rechteck zu erzeugen und zu überprüfen, ob die Punkte in dem selbigen liegen.
In den Header Dateien im Verzeichnis .../microwin-0.89/src/include können alle Funktionen und Konstanten gefunden werden, die MicroWindows zur Verfügung stellt. Diese müssen über eine Externe Deklaration Kylix bekannt gemacht werden.
Das sieht beispielsweise so aus:
functionCreateRectRgn(left,top,roght,bottom: integer):THandle;cdecl; external 'libmicrowin.so';
Das Hauptproblem ist die Umwandlung der C Typen in Kylix Typen. Die meisten Typen existieren aber und wollen nur gefunden werden.
Hilfreich ist die Typdefinition der entsprechenden API Funktionen in Delphi nachzuschauen. Und hoffen, dass es reicht das T durch ein Q zu ersetzen.
Hilfreich kann das Programm h2pas aus dem Projekt FreePascal sein.
Bitte wenden Sie sich bei Problemen oder Anregungen an die obige Email Addresse.