Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   FMX anwendung optional als konsolen Anwendung betreiben (https://www.delphipraxis.net/211436-fmx-anwendung-optional-als-konsolen-anwendung-betreiben.html)

QuickAndDirty 15. Sep 2022 16:50

FMX anwendung optional als konsolen Anwendung betreiben
 
Hallo, Ich habe eine Nützliche funktion die in einer FMX Anwendung liegt,
über einen Startparameter nach außen verfügbar gemacht.
Dann führt die Exe nur diese eine Funktion aus und beendet sich wieder.
Jetzt ist es so, dass FMX Anwendungen ja nicht auf W2K laufen.
Wenn ich im Programmteil, sobald der startparameter gefunden wird, dafür sorge, dass keine "FMX.Forms" erstellt werden,
kann ich dann davon ausgehen, das das Programm auf W2K lauffähig ist?
Die Funktion benötigt dennoch Components , aber keine Controls, vor allem weil sie eben FireDac und einen SoapClient benötigt.

Was macht, dass W2K FMX anwdungen als "ist keine W32 Anwedung" betrachtet?

Der schöne Günther 15. Sep 2022 17:13

AW: FMX anwendung optional als konsolen Anwendung betreiben
 
Muss ja nicht zwangsläufig FMX sein was einen Showstopper im Gepäck hat, sondern praktisch ein beliebiger Teil in der RTL.

Dieses scheußliche Konzept der Unit-
Delphi-Quellcode:
initialization
nimmt einem ja auch jegliche Kontrolle was deine .exe alles anstellt bevor auch nur deine allererste Zeile ausgeführt wird.

Niemand wird dir eine Garantie geben können, dass ein FMX-Programm zu 100% das tut was du dir vorgestellt hast.

Harry Stahl 15. Sep 2022 17:26

AW: FMX anwendung optional als konsolen Anwendung betreiben
 
Ich denke auch, Du wirst es einfach ausprobieren müssen, zumal wir nicht wissen, welche Units Du alle verwendest. Es wurde ja hier schon angesprochen, allein aufgrund der Initialisierungen können Sachen aufgerufen werden, die an neue Techniken anknüpfen, die eben in W2K nicht vorhanden sind.

Wenn es nicht klappt, evtl. auch mal versuchen mit den GlobaluseXXX = false neue Beschleunigungs-Techniken für die Anzeige zu deaktivieren.

himitsu 15. Sep 2022 17:27

AW: FMX anwendung optional als konsolen Anwendung betreiben
 
Und auch statische Links auf Funktionen (WinAPI) und damit auch auf DLLs,
welche dort nicht vorhanden sind, würden sofort beim Start knallen, noch lange bevor irgendein Code von dir ausgeführt würde.

Fazit: Du mußt deinen Code auslagern (z.B. DLL oder BPL), wo dann sonst nichts Böses enthalten ist.


Rate mal, warum ich gern Delayed-Importe nutze (man kann aber auch dynamische Importe nutzen, also LoadLibrary+GetProcAddress), für Dinge, die eventuell nicht vorhanden sind werden.


Und wer ganz böse ist ... da EXE und DLL das selbe PE-Format und die gleiche Eintrittsprozedur implementieren,
könnte man eine EXE auch als DLL laden (und mit bissl Gekacktem auch andersrum) ... wobei die DLL als EXE zu laden bissl krank ist und man da besser den DLLHost von Windows für benutzt. :stupid:


Zitat:

ist keine W32 Anwedung
Das dürfte wohl eher nicht am FMX liegen,
sondern daran, dass aktuelle Delphis eine höhere PE-Version angeben,
welche W2K nicht unterstützt / nicht kennt.

Wenn ja, dann wäre es auch egal, ob du so kompilierst, dass FMX garnicht enthalten ist.
Du könntest aber den PE-Header umschreiben (ich glaub die Version ging auch irgendwie als Compiler-Directive, oder eben nach dem Kompilieren die Bits drehen)
Oder du mußt eben ein älteres Delphi nutzen.


Problem bei Fehlermeldungen wie "ist keine W32 Anwedung" ist aber, dass diese Fehlermeldung garnicht von der EXE selber kommen muß,
sondern es kann auch über eine DLL kommen, welche geladen werden soll und die dann nicht passt.
(du weißt nicht von wo der Fehlercode kommt, da Microsoft zum GetLastError leider keine ZusatzInfos bereitstellt, also einen "Text", wo z.B. der Dateiname zum Fehlercode drin stünde)
Da kannst du nur mit dem ProcessExplorer schauen, was versucht wird zu laden und das Letze dürfte dann das sein, was wirklich knallt.

BerndS 15. Sep 2022 20:09

AW: FMX anwendung optional als konsolen Anwendung betreiben
 
@himitsu
Zitat:

...könnte man eine EXE auch als DLL laden
Wie soll das funktionieren? Bei meinen Versuchen hat es immer geknallt. Daher mache ich es auf die "kranke Weise":oops:.

Uwe Raabe 15. Sep 2022 21:21

AW: FMX anwendung optional als konsolen Anwendung betreiben
 
Ich habe das schon lange ad acta gelegt und mache für eine Kommandozeilenversion immer ein separates Projekt. Dabei ist der eigentliche Code in den entsprechenden Units vorhanden und wird bei Bedarf sowohl von der GUI- als auch von der CMD-Variante verwendet. Damit hält sich die Pflege in vertretbaren Grenzen und es lebt sich damit deutlich befreiter.

Rollo62 16. Sep 2022 07:35

AW: FMX anwendung optional als konsolen Anwendung betreiben
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1511861)
Ich habe das schon lange ad acta gelegt

Darf man fragen warum ?
Ich habe mir einen zentralen Verwalter für gui/console gebaut, der im DPR ganz früh die Verarbeitung übernimmt und im Konsolenbetrieb auch Tastaturbefehle abfängt und eine MessageLoop simuliert.
So kann ich gui und console Betrieb sauber in Module trennen, und bei Bedarf sogar von console auf GUI umschalten und erst bei Bedarf erzeugen.
Zurück komme ich da dann durch Application.Hide, vermutlich könnte ich das gui aber auch irgendwie zerstören, da sehe ich aber keinen Sinn drin wenn man das mal gelauncht hat.

Das habe ich zwar nur mal testweise in kleineren Projekten gemacht und nutze das nicht in großen produktiven Projekten,
allerdings ich sehe keinen Grund warum man das nicht machen sollte.

QuickAndDirty 16. Sep 2022 08:33

AW: FMX anwendung optional als konsolen Anwendung betreiben
 
Zitat:

Zitat von Harry Stahl (Beitrag 1511854)
Wenn es nicht klappt, evtl. auch mal versuchen mit den GlobaluseXXX = false neue Beschleunigungs-Techniken für die Anzeige zu deaktivieren.

Hatte schonmal alle GlobalUse* Variablen deaktiviert...hat damals nichts gebracht. Aber da wollte ich noch erreichen , dass das Forumlar gezeichnet wird...in W2K

QuickAndDirty 16. Sep 2022 08:39

AW: FMX anwendung optional als konsolen Anwendung betreiben
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1511861)
Ich habe das schon lange ad acta gelegt und mache für eine Kommandozeilenversion immer ein separates Projekt. Dabei ist der eigentliche Code in den entsprechenden Units vorhanden und wird bei Bedarf sowohl von der GUI- als auch von der CMD-Variante verwendet. Damit hält sich die Pflege in vertretbaren Grenzen und es lebt sich damit deutlich befreiter.

Der UI und BL code sind sauber getrennt. Ich würde es auch so machen wie du. Es gibt leider andere Zwänge die es notwendig machen diese Exe Datei zu benutzen.

QuickAndDirty 16. Sep 2022 08:45

AW: FMX anwendung optional als konsolen Anwendung betreiben
 
[QUOTE=Rollo62;1511866]
Zitat:

Zitat von Uwe Raabe (Beitrag 1511861)
Das habe ich zwar nur mal testweise in kleineren Projekten gemacht und nutze das nicht in großen produktiven Projekten,
allerdings ich sehe keinen Grund warum man das nicht machen sollte.

Es ist ein kleines Projekt!
Ich habe bisher nur VCL-GUI Anwendung und VCL-Dienst Anwendungen in einem Projekt untergebracht (in der dpr) .
Deswegen wollte ich wissen ob ich eine in W2K lauffähige konsolen Anwendung die einen kleinen teil der Business Logic der Anwendung verfügbar macht
UND
eine FMX Anwendung die ja nicht auf W2K zum laufen zu kriegen ist, in einem Projekt unterbringen kann.
Reich es in der DPR die FMX forms nicht zu erzeugen? Oder Darf es auch kein Application object sein? Das wäre evtl schlecht...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:51 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz