AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Kommunikation zwischen zwei Delphi-Programmen

Kommunikation zwischen zwei Delphi-Programmen

Ein Thema von Int3g3r · begonnen am 27. Mai 2020 · letzter Beitrag vom 27. Mai 2020
Antwort Antwort
Seite 1 von 2  1 2   
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#1

Kommunikation zwischen zwei Delphi-Programmen

  Alt 27. Mai 2020, 16:22
Guten Tag,

Ich habe zwei Delphi-Programme die miteinander kommunizieren sollen.

Programm 1 -> Sendet Telefonnummer per Startparametern an Programm 2
Programm 2 -> Soll Name, Adresse, Ort etc. zurück an Programm 1 liefern.

Wie lässt sich dies elegant lösen ?
Das einfachste was ich mir überlegt habe ist das Programm 2 die Daten in eine textdatei schreibt und Programm 1 diese ausliest.
Damit bin ich aber nicht wirklich zufrieden. Am liebsten möchte ich das Programm 2 einen Record mit allen Daten zurückliefern.
Somit habe ich mich schlau gemacht und bin auf "Memory Mapped Files" gestossen.

Delphi-Treff
Beispiel

Das Obere Beispiel habe ich getestet. Dies wäre genau das was ich suche.
Beim Empfänger kommen nur keine Daten an.

1) Muss die "WMMFNOTIFY" procedure manuell ausgeführt werden ?
Da hier "NOTIFY" geschrieben ist gehe ich davon aus das der Sender den Empfänger informiert und die daten danach gelesen werden, ist dies korrekt ?

2) Für mich ist auch unklar für was die Variable "(var msg: TMessage)" benutzt wird.
Bzw "procedure WMMMFNOTIFY(var msg: TMessage); message WM_MMFNOTIFY;" -> Habe eine solche procedure definition noch nie gesehen.

Delphi-Quellcode:
procedure TTReceiver.WMMMFNOTIFY(var msg: TMessage);
var
  MyData: TMyData;
begin
  MyData := ReadFromMMF('MyFileMapping');
  Edit1.Text := MyData.Zeichenkette;
  CheckBox1.Checked := MyData.BoolVar;
  Edit2.Text := IntToStr(MyData.Zahl);
end;
Freundliche Grüsse,
Int3g3r
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
928 Beiträge
 
#2

AW: Kommunikation zwischen zwei Delphi-Programmen

  Alt 27. Mai 2020, 16:38
Nimm gleich die Indy TIdTCPServer / TIdTCPClient. Dann kannst du beide auch auf unterschiedlichen Rechnern laufen lassen.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.093 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Kommunikation zwischen zwei Delphi-Programmen

  Alt 27. Mai 2020, 16:40
Es gibt zur Inter-Prozesskommunikation (IPC) auf Windows so viele verschiedene Wege. Wirklich viele.
Ich würde das ehrlich gesagt das auch über Sockets machen, soweit man keinen anderen Grund hat (bspw. sehr hohe Datenmengen oder ultra-geringe Latenz).
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Kommunikation zwischen zwei Delphi-Programmen

  Alt 27. Mai 2020, 16:58
Ich wollte es eigentlich vermeiden Strings zu senden.
Diese muss ich dann entweder in spezifischer Reihenfolge einlesen / verarbeiten.

Der Vorteil wäre im Memory das ich direkt auf einen Record zugreifen könnte.
Also hätte ich direkt einen Datentyp der bereits sauber strukturiert ist.

Oder ist es möglich einen Record per Socket zu versenden und diesen danach als Record zu empfangen ?

Danke für die Hilfe,
Int3g3r
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.093 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Kommunikation zwischen zwei Delphi-Programmen

  Alt 27. Mai 2020, 17:03
Wenn du dir, um Arbeit zu sparen, wirklich die Daten 1:1 austauschen willst wie sie grade im Speicher liegen musst du allerdings auch sicherstellen dass beide Programme mit exakt den gleichen Compilern und Compiler-Einstellungen (Record-Padding, ...) erstellt wurden. Ist dir das klar?

Typen mit automatischer Referenzzählung (Strings, dynamische Arrays, ...) kannst du über so eine Methode sowieso nicht versenden, da bekämen sich beide Programme nur in die Haare. Dann fängst du, wenn du z.B. deine Dinge wie Adresse liefern willst, sowieso wieder an, Strings erst in Char-Arrays mit fester Größe zu stopfen um sie dann zu übertragen.

Und ich glaube mit Sockets über TCP (oder vlt. sogar HTTP/REST) ist man da sogar schneller und unkomplizierter fertig.
Ich sehe Dinge wie Memory Mapped Files eher bei Dingen wie großen Bitmaps und ähnlichem, aber die Entscheidung liegt natürlich bei dir.
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#6

AW: Kommunikation zwischen zwei Delphi-Programmen

  Alt 27. Mai 2020, 17:10
Wenn ich das richtig gelesen habe, wird Programm2 jedes mal mit der Nummer als Startparameter von Programm1 gestartet. Liefert die anderen Daten und schließt sich dann wieder?

Dann mach doch ein Konsolenprogramm mit dem Ergebnis als Output. Ja ist wieder Strings, aber einen String zu splitten und auf einen Record aufzuteilen ist mit ein paar Zeilen Code ereldigt
Ralph
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Kommunikation zwischen zwei Delphi-Programmen

  Alt 27. Mai 2020, 17:14
Wenn du dir, um Arbeit zu sparen, wirklich die Daten 1:1 austauschen willst wie sie grade im Speicher liegen musst du allerdings auch sicherstellen dass beide Programme mit exakt den gleichen Compilern und Compiler-Einstellungen (Record-Padding, ...) erstellt wurden. Ist dir das klar?
Nein das war mir nicht klar.

Danke für die Hilfe, werde es mit den Indy Komponenten lösen.

Gruss,
Int3g3r
  Mit Zitat antworten Zitat
Int3g3r

Registriert seit: 28. Nov 2018
Ort: Schweiz
118 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Kommunikation zwischen zwei Delphi-Programmen

  Alt 27. Mai 2020, 17:17
Wenn ich das richtig gelesen habe, wird Programm2 jedes mal mit der Nummer als Startparameter von Programm1 gestartet. Liefert die anderen Daten und schließt sich dann wieder?

Dann mach doch ein Konsolenprogramm mit dem Ergebnis als Output. Ja ist wieder Strings, aber einen String zu splitten und auf einen Record aufzuteilen ist mit ein paar Zeilen Code ereldigt
Ja fast, es werden auch Orte und Namen als Startparameter übergeben. Dann soll der User den gesuchten Eintrag selektieren (bei mehreren Resultaten) und nur der gesuchte Eintrag wird zurückgegeben.
Somit reicht ein Konsolenprogramm nicht aus da es dem user präsentiert wird und dieser in einem Grid die Selektion vornehmen kann.
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.364 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Kommunikation zwischen zwei Delphi-Programmen

  Alt 27. Mai 2020, 19:50
Ich wollte es eigentlich vermeiden Strings zu senden.
Diese muss ich dann entweder in spezifischer Reihenfolge einlesen / verarbeiten.
Dazu gibt es Json, XML,... die dir das geparst als Objektstruktur dann wieder zur Verfügung stellen...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.017 Beiträge
 
Delphi 12 Athens
 
#10

AW: Kommunikation zwischen zwei Delphi-Programmen

  Alt 27. Mai 2020, 21:06
Dazu gibt es Json, XML,... die dir das geparst als Objektstruktur dann wieder zur Verfügung stellen...
Und weitergedacht auch noch SOAP, REST, DataSnap, .............,
also nicht nur das Datenformat, sondern gleich auch das ganze Protokoll/Framework zur Datenübertragung.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:41 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