AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Formular in DLL verlagern, aufrufen und damit kommunizieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Formular in DLL verlagern, aufrufen und damit kommunizieren?

Ein Thema von a.def · begonnen am 26. Jan 2017 · letzter Beitrag vom 26. Jan 2017
Antwort Antwort
Seite 1 von 2  1 2      
a.def
(Gast)

n/a Beiträge
 
#1

Formular in DLL verlagern, aufrufen und damit kommunizieren?

  Alt 26. Jan 2017, 13:03
Ich verfolge seit einiger Zeit die Idee ein gewisses Formular meiner Anwendung in eine weitere Exe- oder DLL-Datei zu verlagern.
Wenn die Hauptanwendung dieses Formular braucht, wird es aufgerufen.

Dieses Formular hat zwei Threads die die GUI anpassen. Was bei einem Formular außerhalb der Hauptanwendung demnach einen großen Vorteil hat ist, dass nichts mehr synchronisiert werden muss.
Das würde dann nur noch in der zweiten Datei passieren und die Hauptanwendung kann sich ausruhen und ihre Arbeit erledigen.

Jetzt aber grundlegende Fragen dazu:

- muss es eine Exe sein oder kann es auch eine DLL sein?
- wie kommuniziert man am besten und performantesten zwischen zwei Prozessen?

TStaticLabel kann ich leider nicht verwenden, da ich HTML-kompatible Labels verwende. Meine erste Idee war per WMCopyData und dann ein komplettes Record zu schicken, welches alle Informationen enthält.

Hier ist übrigens ein schönes Beispiel mit SendMessage. Aber ist das noch aktuell?

Delphi - Interprozesskommunikation mit WM_COPYDATA - http://www.michael-puff.de

Geändert von a.def (26. Jan 2017 um 13:07 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Formular in DLL verlagern, aufrufen und damit kommunizieren?

  Alt 26. Jan 2017, 13:40
- muss es eine Exe sein oder kann es auch eine DLL sein?
- wie kommuniziert man am besten und performantesten zwischen zwei Prozessen?
Code in einer DLL wird im selben Kontext wie die EXE Datei ausgeführt. Das Formular in einer DLL unterzubringen würde daher nichts an der Belastung des Prozesses ändern.

Als Interprozess-Kommunikationslösungen gibt es Named Pipes / Mailslots, Memory Mapped Files, Sockets, und Windows Messages. Für Sockets gibt es Indy, damit kann man sich selbst definierte Protokolle erstellen oder bestehende Protokolle (z.B. HTTP) verwenden, um Daten auszutauschen. Socketverbindungen können zwischen verschiedenen Rechnern und Plattformen hergestellt werden.
Michael Justin
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#3

AW: Formular in DLL verlagern, aufrufen und damit kommunizieren?

  Alt 26. Jan 2017, 13:44
Ok das bedeutet also, dass eine DLL nicht in Frage kommt. Demnach muss es eine Exe-Datei sein, der ich dann von meiner Hauptanwendung aus die Daten zuschicke?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Formular in DLL verlagern, aufrufen und damit kommunizieren?

  Alt 26. Jan 2017, 15:27
Welchen Nutzen versprichst du dir davon?
Solch eine DLL-Schnittstelle vereinfacht die Implementierung nicht.

Ich war froh als ich vor Jahren so eine Schnittstelle (nicht Delphi) entfernen konnte.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#5

AW: Formular in DLL verlagern, aufrufen und damit kommunizieren?

  Alt 26. Jan 2017, 15:35
War ja nur ein Gedanke.
Werde es dann mit einer weiteren Exe-Datei lösen.

Was ich mir davon verspreche ist, die Hauptanwendung durch Entfernen von Synchronize (in 2 Threads, beide synchronisieren Labels auf einem Formular) deutlich zu entlasten.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Formular in DLL verlagern, aufrufen und damit kommunizieren?

  Alt 26. Jan 2017, 15:36
Ok das bedeutet also, dass eine DLL nicht in Frage kommt. Demnach muss es eine Exe-Datei sein, der ich dann von meiner Hauptanwendung aus die Daten zuschicke?
Die Hauptanwendung kann einen lokalen TCP Server (d.h. ein Server, der nur Socketverbindungen auf dem loopback Adapter 127.0.0.1 / localhost akzeptiert) starten, der auf Clients wartet. In Indy gibt es dafür bereits den TIdTCPServer, in dessen OnExecute Methode man dann Daten an den Client senden kann.

Die andere Anwendung benötigt dann nur eine TIdTCPClient Komponente, sie verbindet sich mit dem Server und wartet auf Daten.

Ich habe das in einem einfachen Beispiel hier als Artikel gepostet:

Indy 10 TIdTCPServer: Server-side message push example

Der Client verwendet dabei einen eigenen Thread, um den GUI Thread nicht zu blockieren.
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Formular in DLL verlagern, aufrufen und damit kommunizieren?

  Alt 26. Jan 2017, 15:39
Was ich mir davon verspreche ist, die Hauptanwendung durch Entfernen von Synchronize (in 2 Threads, beide synchronisieren Labels auf einem Formular) deutlich zu entlasten.
Ich würde eher diese Stelle überlegen was hier falsch läuft als das hier mit 2 Exe gewerkelt wird.
Ist für mich genauso ein Overkill als mit DLLs zu arbeiten.

Sollten das Label so stark "belastet" sein, dann überleg mal das Aktualisierung die nur wenige ms gültig sind für den Nutzer kenen Mehrwert darstellen.
Wie wäre es statt Synchronize z.B. mit Timer zu arbeiten um z.B. nur alle 300 ms den gerade gültigen Wert anzuzeigen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#8

AW: Formular in DLL verlagern, aufrufen und damit kommunizieren?

  Alt 26. Jan 2017, 15:46
Blockieren tue ich ja nichts. Die Belastung für die Labels hält sich auch in Grenzen. In meinen Threads ist ein Sleep von 25ms. Aktualisiert werden die Labels auch eh nur dann, wenn es neue Nachrichten gibt (PeekMessage). Also ist das mit 2 Exen totaler Unfug?
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Formular in DLL verlagern, aufrufen und damit kommunizieren?

  Alt 26. Jan 2017, 15:56
Wenn tatsächlich nichts blockiert, warum willst Du es dann umstellen?

Wenn Du 2 Exen hast und diese nicht blockierend kommunizieren können sie sich gegenseitig auch nicht blockieren. Die Kommunikation ist aber ggf. aufwendig und etwas langsamer (Netzwerk).

Einfacher ist es, aufwendigere Berechnungen einfach in Threads auszulagern und diese für Zwischenstände oder Endergebnisse mit dem Mainthread zu synchronisieren.

Letztlich kommt es darauf wann, was Du genau erreichen willst und wo es aktuell klemmt.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#10

AW: Formular in DLL verlagern, aufrufen und damit kommunizieren?

  Alt 26. Jan 2017, 15:58
Naja, Entlastung, weniger Code in der Hauptanwendung, bessere Update-Möglichkeiten..
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:07 Uhr.
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