Non GUI Application
-
- 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
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
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
-
- 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
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
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
-
- 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
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
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
-
- 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:
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
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/
-
- 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
Ich habe Lazarus 0.9.20. Da finde ich keine Dämonen im Datei->Neu Menü.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
Gibt es was aktuelleres ?
Done.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
-Michael
-
- 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
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.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
Was für eine Lazarus-Version verwendest Du denn, dass da schon der Daemon Stuff in der IDE (unter "Datei->Neu" eingebaut ist ?
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.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
Gruß und Dank,
-Michael
-
- 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:
0.9.21, ist seit einigen wochen mit im SVN.Was für eine Lazarus-Version verwendest Du denn, dass da schon der Daemon Stuff in der IDE (unter "Datei->Neu" eingebaut ist ?
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/
-
- 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
OOps ein Package kann die Menüs der IDE ändern ?!?!? Naja, das Auswahl-Fenster ist je kein eigentliches Menü....Christian hat geschrieben:in einem package, das installierst du und es fügt dem Datei->Neu Dialog die angesprochenen neuen Applikations Styles hinzu.
Kann man das Ding vielleicht auch in der aktuellen "stabilen" Version installieren ?
-Michael