MicroWindows Funktionen unter Kylix

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.

Allgemeines

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.

Installation von MicroWindows

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:

  1. in die Datei Makefile.rules folgende Einträge einfügen:

    SHAREDLIBS=Y

    OBJFRAMEWORK=Y

  2. in die Datei Makefile folgenden Eintrag einfügen:

    CFLAGS += -ansi -pedantic -Wall

  3. Aufruf von WinMain in Zeile 60 in der Datei ./src/mwin/winmain.c auskommentieren.

Nun kann MicroWin mit make übersetzt werden. Es sollten keine Fehler auftreten.

Installation des Demo-Projektes

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.

Benutzen

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.

Hinzufügen neuer Funktionen

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.

Informationen

Author
Peter Korf
Home Page
www.niendo.de
System
leider nur auf SuSE 8.1 getestet.
Letzte Änderung
Januar 2003
Copyright
This Text is so free, as the world should be!

Bitte wenden Sie sich bei Problemen oder Anregungen an die obige Email Addresse.