![]() |
AW: .exe zu .exe Kommunikation
Schau Dir mal den m-puff @ WMCOPYDATA Link an, da wird es mit einem Record beschrieben was ich genau so übernehmen mag.
Ich ersetze lediglich im Record einen Boolean mit einem Byte. Mein Empfänger soll 3 Zeilen zeigen für 3 verschiedene Nachrichten Typen. 1. Sender fängt eine Operation an 2. Sender hat Operation beendet 3. Auswertungsergebniss von Operation oder Fehlernachricht Ich habe gerade mal gegoogelt und der erste Treffer sagt was über TCopyDataStruct. ![]() |
AW: .exe zu .exe Kommunikation
Ich werfe da mal noch etwas rein. Mag vielleicht im ersten Moment etwas komisch klingen aber du kannst auch
TCP oder UDP für die Kommunikation zwischen Prozessen verwenden. Finde ich z.B. angenehmer zu benutzen als Pipes oder Memory mapped Files. WM_COPYDATA geht auch aber würde ich nicht benutzen wenn die Kommunikation über "Hier nimm das!" hinausgeht. |
AW: .exe zu .exe Kommunikation
@NG: Hättest Du dafür eventuell exemplarisch ein Beispiel-Code oder Link? Ich bin gerade dabei aus allen genannten Varianten eine Beispiel-Demo zu erstellen und anschließend hier zur Verfügung stellen.
|
AW: .exe zu .exe Kommunikation
Ehm.. Ich könnte evtl. später was basteln aber falls du schon mal Netzwerkkram gemacht hast mit TIdTCPClient o.ä. dann müsstest du das auch so hinkriegen.
Es macht letztendlich keinen Unterschied ob die Verbindung zwischen zwei Programmen auf unterschiedlichen PCs besteht oder zwischen 2 Programmen auf dem gleichen PC. Der Code ist derselbe. Falls du mit Sockets noch nie was gemacht hast schau dir mal TIdTCPClient/TIdTCPServer an und such bei Google mal danach. Wirst wahrscheinlich ne Menge finden. Zu Memory mapped Files: Hab damals mal eine Unit dafür gebaut in dem extra eine Klasse für IPC enthalten ist: ![]() Falls du die Jedi JWSCL installiert hast, dann ist diese Unit als "JwsclStreams.pas" schon dabei. |
AW: .exe zu .exe Kommunikation
Danke, der Ansatz genügt mir, damit kann ich was Anfangen. Deine "mappedstreams_151.pas" werde ich mit einbauen ;-)
edit Nein, momentan ist mein Delphi noch relativ jungfräulich was zusatz Pakete betrifft. Ein paar Kauf-Pakete sind drinnen, das war's dann schon. |
AW: .exe zu .exe Kommunikation
WM_COPYDATA kommt spätestens an seine Grenzen, wenn ein Prozess elevated ist und der andere nicht (was logischerweise auch der Fall ist bei Kommunikation mit einem Systemdienst). Auch mit mehreren Prozessen auf verschiedenen Sessions (RDP, Fast User Switching, Terminal Services) kommt man da nicht weiter.
Ob WM_COPYDATA, Pipes, MMF, oder TCP - das kommt sicher auf den Verwendungsfall an. In Prozessen, von denen es nur eine Instanz geben soll, übergebe ich ich Parameter an den bereits laufenden Prozess per Pipe, da fällt WM_COPYDATA auch schon aus, weil der laufende Prozess ja elevated sein kann. MMF verwende ich beispielsweise, um in einem Systemdienst einen Status zu schreiben, auf den mehrere andere Prozesse dann nur lesend zugreifen. Ist einfach zu greifen weil kaum anders als Dateihandling. Mit TCP kann man ziemlich viel, ich würde da aber auf bewährte Kontrollstrukturen zurückgreifen, mindestens https, warum nicht gleich webservices, da muss man mit entsprechenden Helfern keine einzelne Zeile selberschreiben? |
AW: .exe zu .exe Kommunikation
Liste der Anhänge anzeigen (Anzahl: 1)
Ich bin bereits daran alle Möglichkeiten einzubinden, siehe Bild Anhang 48925
edit Erster Test mit WMCOPYDATA ergab übrigens genau was Du sagst, wenn Server Admin ist und Client nicht dann klappt es nicht. |
AW: .exe zu .exe Kommunikation
Wenn dein Beispiel gut funktioniert, sollte man es in die CodeLib aufnehmen wie ich finde.
Dann gäbe es eine zentrale Anlaufstelle für alle Fragesuchenden dieses Themas. |
AW: .exe zu .exe Kommunikation
Da hätte ich Grundsätzlich nichts gegen einzuwänden aber das überlasse ich wichtigeren Menschen ;-)
Momentan tüftel ich daran wie ich jede Methode in eine einzelne Unit quetsche damit man dann nur noch die entsprechende Unit sich rausfischen brauch, falls Bedarf an so etwas besteht. Mein Sorgenkind ist gerade eher der Client, dem bringe ich gerade bei auf die verschiedenen Methoden auch korrekt zu reagieren, auch da wieder einzelne Units. Bis auf das WMCOPYDATA was zwangsläufig in der Hauptunit verankert sein muss denke ich das alles ein Gutes Ende nehmen wird, aber vielleicht finde ich ja noch einen Weg das WMCOPYDATA da auch rauszuhalten, mal sehen. Wenn es fertig ist stelle ich es unter Benutzerprojekte bereit. Einen Thread-Titel der Aussagekräftiger als ".exe zu .exe Komminukation" muss ich mir auch noch einfallen lassen ^_^ |
AW: .exe zu .exe Kommunikation
WM_COPYDATA muss nicht in der Hauptunit (Formular-Unit) verankert sein.
Du kannst Nachrichten auch empfangen mit einem eigenen unsichtbaren Fenster, was du leicht durch AllocateHWnd erstellen kannst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 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