Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Datenaustausch zwischen 2 Programmen? (https://www.delphipraxis.net/121512-datenaustausch-zwischen-2-programmen.html)

Errraddicator 29. Sep 2008 14:38


Datenaustausch zwischen 2 Programmen?
 
Hiho,

ich hatte ursprünglich vor meine Programme auf Multithreading umzustellen, um Laufzeit zu sparen.
Dies funktioniert aber nicht, da die Datenbankanbindung die ich nutzen muss (Drittanbieter) nicht für sowas geeignet ist.

Jetzt habe ich die Überlegung mir (wie bisher) ein Singlthreading Programm zu schreiben und das in eine Art Client/Server-Architektur einzubinden.

Also Schemadarstellung ähnlich zum Thread-Ablauf:
Delphi-Quellcode:
Programm
|- Sammelt Anforderungen
|- Gibt diese an Threads weiter
   |- Thread #1 verarbeitet x Anforderungen
   |- Thread #2 verarbeitet y Anforderungen
|- Sammelt die erzeugten Daten der Threads
|- Gibt Ausgabedaten aus
das Ganze auf Programm Ebene:
Delphi-Quellcode:
Programm 1
|- Sammelt Anforderungen
|- Gibt diese an Unterprogramme weiter
   |- Programm 2 (Instanz A) verarbeitet x Anforderungen
   |- Programm 2 (Instanz B) verarbeitet x Anforderungen
|- Sammelt die von den Unterprogrammen erzeugten Daten
|- Verarbeitet Ausgabedaten
Sprich:
Mehr oder weniger das gleiche Prinzip aber halt von Thread auf Programm-Ebene verlagert.

...

Jetzt habe ich aber 1 großes Problem:
Wie schaffe ich es, dass mein Hauptprogramm mit den Unterprogrammen "Programm 2" kommunizieren kann?
So dass ich dem sage "Mach das" und am Ende auch dessen Ausgabe wieder auslesen, sammeln und weiterverarbeiten kann?

Da müsste ich doch quasi eine Client-Server-Anwedung schreiben, oder?
Programm 1 ist der Server der 2 oder mehr Clients startet, diese mit der Verarbeitung beauftragt und anschließend Daten von denen geliefert bekommt.

Aber wie mache ich das?

...

Oder kann ich die Kommunikation auch über OLE / COM z.b. regeln?


Danke im Voraus

cu Patrick

mkinzler 29. Sep 2008 14:40

Re: Datenaustausch zwischen 2 Programmen?
 
Named Pipes, IPC, MailSlots, IP, ...

sirius 29. Sep 2008 14:52

Re: Datenaustausch zwischen 2 Programmen?
 
Zitat:

Zitat von mkinzler
Named Pipes, IPC, MailSlots, IP, ...

IPC?
IPC ist doch der Oberbegriff (inter process communication) oder hast du da noch was spezielles?

Medium 29. Sep 2008 17:06

Re: Datenaustausch zwischen 2 Programmen?
 
Ich finde Messages immer recht hübsch um Aktionen anzustoßen, und Memory-Mapping zum Teilen von Daten, die man nicht mehr in lParam und wParam quetschen kann :)

Errraddicator 30. Sep 2008 08:53

Re: Datenaustausch zwischen 2 Programmen?
 
Gibts da irgendwo ein kleines Tutorial oder Beispiele?

Habe im Moment das hier gefunden: http://assarbad.net/stuff/tutorials/...k_tutorial.pdf
Aber da werde ich nich so ganz schlau draus, bzw. weiß nich so recht wie ich da jetzt meine Datenstrukturen austauschen kann.

divBy0 30. Sep 2008 09:19

Re: Datenaustausch zwischen 2 Programmen?
 
Da ich das gerade interessant finde und es eigentlich auch zum Thema passt:

Wie viel kann oder sollte man denn mit den genannten Möglichkeiten übertragen?

Xeres 30. Sep 2008 09:43

Re: Datenaustausch zwischen 2 Programmen?
 
Schau mal hier:

http://www.swissdelphicenter.ch/de/showcode.php?id=810


Hier wird mit Windows-Messages sehr einfach zwischen 2 Prozessen kommuniziert

Errraddicator 30. Sep 2008 12:14

Re: Datenaustausch zwischen 2 Programmen?
 
Zitat:

Zitat von Xeres
Schau mal hier:

http://www.swissdelphicenter.ch/de/showcode.php?id=810


Hier wird mit Windows-Messages sehr einfach zwischen 2 Prozessen kommuniziert

Hey, das ist doch quasi genau das was ich haben möchte. :)
Habs auch schon ausprobiert und mit Strings funzt es wie im Beispiel wunderbar.
Ich denke ja ma nich, dass das nen großen Unterschied macht, ob ich da jetzt Strings oder eine meiner eigenen Datenstrukturen als Zeiger hinterlege, oder?

1 kurze Frage noch zum Verständnis:
Welche Bedeutung hat "TCopyDataStruct.dwData"?
Für mich macht das jetzt den Eindruck, dass das Windows-technisch gesehen egal ist und nur für meine Programme frei definierbar is, damit ich ne Unterscheidung habe, um was für eine Art von Daten es sich da im mitgelieferten Pointer handelt, oder?

Dezipaitor 30. Sep 2008 12:17

Re: Datenaustausch zwischen 2 Programmen?
 
Zitat:

Zitat von Xeres
Hier wird mit Windows-Messages sehr einfach zwischen 2 Prozessen kommuniziert

Kann ich nur abraten, da es spätenstens in Vista nicht mehr funktioniert, wenn ein Prozess erhöhte Rechte besitzt.


Mailslots sollte man auch nicht mehr verwenden, da sie nur aus Kompatibilitätsgründen (LanMan) existieren.


Pipes und SharedMemory ist eine gute Wahl. Jedoch sollte man immer daran denken, dass die Sicherheitseinstellung (Besitzer, DACL) nur den notwendigen Systemen (die beiden Progs) einen Zugriff gibt. Andernfalls kann es zu erfolgreichen Übernahmeversuchen kommen. Leider ist das nicht so ohne weiteres machbar im Userkontext und man muss daher seine Lese- und Schreibroutinen vor Pufferüberläufen etc. schützen. Für eine Dienstkommunikation ist es aber unabdingbar.

sirius 30. Sep 2008 12:25

Re: Datenaustausch zwischen 2 Programmen?
 
Zitat:

Zitat von Dezipaitor
Kann ich nur abraten, da es spätenstens in Vista nicht mehr funktioniert, wenn ein Prozess erhöhte Rechte besitzt.

Er startet definitiv die beiden Processe im selben Context :zwinker: Und wenn der User daran was ändert ist er selber Schuld. Für den Anfang ist es doch ganz ok.


Und ja, dwData kannst du frei verwenden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:18 Uhr.
Seite 1 von 3  1 23      

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