![]() |
Kommunikation zwischen zwei Delphi-Programmen
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. ![]() ![]() 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:
Freundliche Grüsse,
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; Int3g3r |
AW: Kommunikation zwischen zwei Delphi-Programmen
Nimm gleich die Indy TIdTCPServer / TIdTCPClient. Dann kannst du beide auch auf unterschiedlichen Rechnern laufen lassen.
|
AW: Kommunikation zwischen zwei Delphi-Programmen
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). |
AW: Kommunikation zwischen zwei Delphi-Programmen
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 |
AW: Kommunikation zwischen zwei Delphi-Programmen
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. |
AW: Kommunikation zwischen zwei Delphi-Programmen
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 |
AW: Kommunikation zwischen zwei Delphi-Programmen
Zitat:
Danke für die Hilfe, werde es mit den Indy Komponenten lösen. Gruss, Int3g3r |
AW: Kommunikation zwischen zwei Delphi-Programmen
Zitat:
Somit reicht ein Konsolenprogramm nicht aus da es dem user präsentiert wird und dieser in einem Grid die Selektion vornehmen kann. |
AW: Kommunikation zwischen zwei Delphi-Programmen
Zitat:
|
AW: Kommunikation zwischen zwei Delphi-Programmen
Zitat:
also nicht nur das Datenformat, sondern gleich auch das ganze Protokoll/Framework zur Datenübertragung. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz