| Autor |
Beitrag |
ludwig altenbuchner
Hält's aus hier
Beiträge: 2
|
Verfasst: Fr 24.07.09 10:54
Hallo,
Ich möchte innerhalb des PC zwischen mehreren Programmen Nachrichten/Daten (Strings oder Records)austauschen können. Gibt es hierfür Lösungen wie Broadcast oder Multicast im Netz?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Fr 24.07.09 10:58
MailSlots, Named Pipes, IPC, Sockets, ...
_________________ Markus Kinzler.
|
|
Tastaro
      
Beiträge: 414
Erhaltene Danke: 23
|
Verfasst: Fr 24.07.09 12:48
Hallo,
mit WM_COPYDATA lassen sich sehr leicht Strings von einer Anwendung zur anderen schicken.
Sender:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| function TForm1.send(strTargetWindow, strText: string): boolean; var hTargetWindow: thandle; recCopyData: TCopyDataStruct; iResult: integer; begin hTargetWindow := findwindow(nil, pchar(strTargetWindow)); if hTargetWindow <> 0 then begin recCopyData.dwData := 0; recCopyData.cbData := length(strText) + 1; recCopyData.lpData := pchar(strText); iResult := sendmessage(hTargetWindow, WM_COPYDATA, longint(Handle), longint(@recCopyData)); Result := (iResult = 0); end else Result := FALSE; end; |
Empfänger:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| TForm2 = class(TForm) private procedure WMCopyData(var Msg: TWMCopyData); message WM_COPYDATA; public end;
procedure TForm2.WMCopyData(var Msg: TWMCopyData); var acText: array[0..1023] of char; strReceivedText: string; begin strlcopy(acText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData); strReceivedText := string(acText); end; |
|
|
ludwig altenbuchner 
Hält's aus hier
Beiträge: 2
|
Verfasst: Fr 24.07.09 13:15
Würde diese Lösung auch für mehrere Empfänger gleichzeitig funktionieren?
|
|
mkinzler
      
Beiträge: 4106
Erhaltene Danke: 13
Delphi 2010 Pro; Delphi.Prism 2011 pro
|
Verfasst: Fr 24.07.09 14:41
Hierfür würde sich einen Named Pipe anbieten
_________________ Markus Kinzler.
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Sa 25.07.09 09:45
Also entschuldigt, falls das jetzt eine zu einfältige Antwort ist, aber ich würde dann doch eher erst mal die Informationen, z.B. mittels MemoInfo.SaveToFile('Informationen'); in eine Datei speichern, und dann die anderen Anwendungen dort getimt nachgucken lassen, ob es neue Infos gibt.
Dadurch hat man auf jeden Fall doch auch eine Kommunikations-Doku!
- Oder hilft dort eine Lösung wie in
Delphi-Forum.de » Windows API » Daten zwischen Prozessen austauschen... aber mit var Daten
besser weiter?
|
|
Tastaro
      
Beiträge: 414
Erhaltene Danke: 23
|
Verfasst: Mo 27.07.09 09:34
ludwig altenbuchner hat folgendes geschrieben : | | Würde diese Lösung auch für mehrere Empfänger gleichzeitig funktionieren? |
Ich will dir ja nicht dan ganzen Spaß am Ausprobieren verderben.
| ffgorcky hat folgendes geschrieben: |
Also entschuldigt, falls das jetzt eine zu einfältige Antwort ist, aber ich würde dann doch eher erst mal die Informationen, z.B. mittels MemoInfo.SaveToFile('Informationen'); in eine Datei speichern, und dann die anderen Anwendungen dort getimt nachgucken lassen, ob es neue Infos gibt.
Dadurch hat man auf jeden Fall doch auch eine Kommunikations-Doku!
|
Und jede Menge zusätzliche Arbeit um zu verhindern, dass die Anwendungen sich beim Kommunizieren nicht in die Quere kommen. Außerdem hat man Millionen von überflüssigen Festplattenzugriffen.
Beste Grüße
|
|
ffgorcky
      
Beiträge: 573
WIN XP/2000 & 7Prof (Familie:Win95,Win98)
|
Verfasst: Mo 27.07.09 19:14
Ja und, Tastaro - hilft denn meine Thread-Angabe weiter?
|
|
dummzeuch
      
Beiträge: 593
Erhaltene Danke: 5
Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
|
Verfasst: Mo 27.07.09 20:39
Tastaro hat folgendes geschrieben : |
| ffgorcky hat folgendes geschrieben: |
mittels MemoInfo.SaveToFile('Informationen'); in eine Datei speichern, und dann die anderen Anwendungen dort getimt nachgucken lassen, ob es neue Infos gibt.
Dadurch hat man auf jeden Fall doch auch eine Kommunikations-Doku!
|
Und jede Menge zusätzliche Arbeit um zu verhindern, dass die Anwendungen sich beim Kommunizieren nicht in die Quere kommen. Außerdem hat man Millionen von überflüssigen Festplattenzugriffen.
|
Festplattenzugriffe sind kein Problem dabei, das meiste laeuft einfach nur im Cache. Kommunikation mittels Dateien ist zwar nicht hipp, aber es funktioniert in vielen Faellen zufriedenstellend. Allerdings sollte immer nur einer schreiben, alle anderen nur lesen.
twm
|
|
Tastaro
      
Beiträge: 414
Erhaltene Danke: 23
|
Verfasst: Di 28.07.09 08:09
ffgorcky hat folgendes geschrieben : | Ja und, Tastaro - hilft denn meine Thread-Angabe weiter? |
Jepp, die hilft. Hab gesehen, dass darin u.a. auch mein o.g. Vorschlag beschrieben ist.
@dummzeuch: Auch wenn nur einer liest und einer schreibt kann es schon zu Problemen kommen, sofern das gleichzeitig geschehen soll. Und je höher die Anzahl der Zugriffe, desto größer ist die Wahrscheinlichkeit, dass der Fall eintritt.
Beste Grüße
|
|