Non GUI Application

Rund um die LCL und andere Komponenten
mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Non GUI Application

Beitrag von mschnell »

In einem anderen Thread hatte ich erläutert, dass ich ein mittelgroßes Delphi-Programm auf einem ARM-Linux System an's Laufen bringen möchte, das keine grafische Oberfläche besitzt. Das soll so geschehen, dass der entstehende Sourcecode verwendet werden kann, um sowohl mit Lazarus das non-GUI Linux-Programm zu erzeugen, als auch mit Delphi das bisherige Projekt mit GUI zu erzeugen und zu testen.

Da ich nun ernsthaft mit den Vorbereitungen anfange, beginne ich einen eigenen Thread für das Thema.

Zunächst soll ein Beispielprogramm gebaut werden, das keine GUI hat, in dem aber Ereignis-gesteuerte Programmierung (z.B. Timer-events und TThread.Synchronize) verwendet werden können.

Ich habe herausgefunden, dass es hier sinnvoll ist, von TCustomApplication eine neue Klasse (z.B. TNonGuiApplication) abzuleiten (statt TApplication in einem GUI Projekt). Das geht auch problemlos, da TCustomApplication keine Bindung zur GUI (Windows oder GTK enthält). Die Prozedur TApplication.DoRun wird in TNonGuiApplication überschrieben mit einer Prozedur
die auf Messages wartet (in Windows Windows-Messages, in Linux System-VI Messages) und nach Eintreffen einer Message angemeldete Events (z.B. Timer-Events und ein Event, das für TThread.Synchronize verwendet wird) aufrufen kann. Das Application-Objekt wird dann als Instanz von TNonGuiApplication kreiert.

Bei der Recherche habe ich festgestellt, dass so etwas ähnliches in Lazarus schon existiert.

Man kann mit dem Menue "Datei->Neu->Projekt->CGI-Application" eine "CGI-Application" erstellen. Hier wird eine Klasse TCGIApplication von TCustomApplication abgeleitet und das Application-Objekt wird als Instanz von TCGIApplication kriert.

Ich vermute eine GGI-Application ist tatsächlich eine "Application" (also kein "Programm" , das keine Message-gesteuerten Events kennt), das aber keine GUI (mit Windows oder GTK-Bindung) sondern einen externen Browser als Oberfläche verwendet.

Wenn ich mit Lazarus versuche, eine neue "CGI-Application" zu erzeugen, bekomme ich eine Access-Violation, bevor ich überhaupt kompilieren kann.

Hat jemand schon einmal eine Lazarus CGI-Application verwendet ?

Gibt es irgendwelche Doku dafür ?

-Michael

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Ich habe herausgefunden, dass TCGIApplication nicht das macht, das ich will. Ich werde jetzt versuchen, in meiner TNonGuiApplication Klasse eine Message-Queue aufzubauen. Zunächst in Windows mit Windows Messages, dann in Linux mit einer System V Message Queue.

P.S.: Wenn das klappt, sollte es kein Problem sein, mehr als ein Application Objekt vom Typ TNonGuiApplication zu instanziieren. Ich werde dann eine TApplicationThread Klasse bauen, die ein solches Objekt instanziiert und damit haben wir einen Thread, der sich Ereignis-gesteuert programmieren lässt, wie der Mainthread. Das sollte dann auch in einem Stadard-Projekt gehen, dessen Main-Thread ein Application Objekt vom Typ TApplication verwendet.

-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Ganz sicher, das du alles neu machen musst ? Der daemon stuff ist ja jetzt auch in Lazarus enthalten ich dächte das man das dort alles schon benutzen kann
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Was ist "Der daemon stuff" ? (Bin momentan zu Hause, Montag im Büro kann ich selber danach suchen.)

-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Im aktuellen fpc gibt es eine plattformunabhängige dämon applikations klasse mit der man dämons plattformunabhängig bauen kann. gibt sogar schon ein lazarus packahe was die zum Datei->Neu menü hinzufügt
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Hört sich interessant an ! Vielen Dank für den Tip !
Wenn hierbei nicht "Forms" eingebunden wird, was wiederum eine Bindung an GTK erzwingt, könnte es eine Lösung sein.

Übrigens:

Weißt Du zufällig aus dem Kopf, was für Code der Compiler generiert, wenn man
"procedure ... message ... "
schreibt ?

Ich vermute, er baut code in die "initialisation" der Unit eine Prozedur aus der Library aufruft. An die muss ich u.U. 'ran, weil das zu portierende Programm "procedure ... message ... " u.U. direkt benutzen könnte (während ich z.B. TTimer und TThread so überarbeiten könnte dass sie das nicht verwenden, sondern ein non-GUI Ereignis im constructor anmelden).

-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

schau dir erstmal an wie das da gelöst ist n daemon mit widgetsetbindungen wäre ja schwachsinn die laufen ja meisst auf servern ohne gui

das mit den messages weiss ich net frag mal auf der fpc mailinglist da hab ich deinen namen ja auch schon n paar mal gesehn ;)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Christian hat geschrieben:schau dir erstmal an wie das da gelöst ist n daemon mit widgetsetbindungen wäre ja schwachsinn die laufen ja meisst auf servern ohne gui


Ich habe Lazarus 0.9.20. Da finde ich keine Dämonen im Datei->Neu Menü.

Gibt es was aktuelleres ?




Christian hat geschrieben:das mit den messages weiss ich net frag mal auf der fpc mailinglist da hab ich deinen namen ja auch schon n paar mal gesehn ;)


Done.

-Michael

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

Die Dämonen wurden auch erst nach der Veröffentlichung von 0.9.20 eingebunden, d.h., du benötigst die 21er Version. Meines Wissens stammen die 'Dämonen-Units' von Michael van Canneyt. Am besten du sprichst ihn mal an.

knight

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

knight hat geschrieben:Meines Wissens stammen die 'Dämonen-Units' von Michael van Canneyt. Am besten du sprichst ihn mal an.


Danke ! Wie komme ich an die Mailadresse von Michael van Canneyt oder wo soll ich ihn ansprechen ?

Gruß, Michael

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

Ich habe dir eine PM geschickt.

knight

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Christian hat geschrieben:schau dir erstmal an wie das da gelöst ist n daemon mit widgetsetbindungen wäre ja schwachsinn die laufen ja meisst auf servern ohne gui


Ich habe mir gerade den neusten Snapshot von FPC geholt und da gibt es ein daemon.pp. Das werde ich mir zunächst 'mal zu Gemüte führen.

Was für eine Lazarus-Version verwendest Du denn, dass da schon der Daemon Stuff in der IDE (unter "Datei->Neu" eingebaut ist ?

Christian hat geschrieben:das mit den messages weiss ich net frag mal auf der fpc mailinglist da hab ich deinen namen ja auch schon n paar mal gesehn ;)


Ich habe herausbekommen, wie es funktioniert (mit der RTTI und "dispatch" ). Das sollte in der geplanten "Non-GUI" oder "daemon" - Application keine besonderen Probleme machen.

Gruß und Dank,
-Michael

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Was für eine Lazarus-Version verwendest Du denn, dass da schon der Daemon Stuff in der IDE (unter "Datei->Neu" eingebaut ist ?


0.9.21, ist seit einigen wochen mit im SVN.
Es ist aber nicht fest in die IDE intigriert sondern in einem package, das installierst du und es fügt dem Datei->Neu Dialog die angesprochenen neuen Applikations Styles hinzu.

Wenn ich das richtig gesehn hab auf der ML hat dir MvC eine vorabversion des Toolbox beitrages geschickt ? Kannst mir den bitte mal zukommen lassen?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Noch ist nichts von ihm angekommen.

Wenn nicht ein entsprechender Vermerk von ihm das verhindert, schicker ich Dir den Text.

-Michael

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Beitrag von mschnell »

Christian hat geschrieben:in einem package, das installierst du und es fügt dem Datei->Neu Dialog die angesprochenen neuen Applikations Styles hinzu.


OOps ein Package kann die Menüs der IDE ändern ?!?!? Naja, das Auswahl-Fenster ist je kein eigentliches Menü....

Kann man das Ding vielleicht auch in der aktuellen "stabilen" Version installieren ?

-Michael

Antworten