Entwickler-Ecke
Sonstiges (Delphi) - Einfacher Datenaustausch zwischen meheren Programmen im PC
ludwig altenbuchner - Fr 24.07.09 10:54
Titel: Einfacher Datenaustausch zwischen meheren Programmen im PC
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 - Fr 24.07.09 10:58
MailSlots, Named Pipes, IPC, Sockets, ...
Tastaro - 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 - Fr 24.07.09 13:15
Würde diese Lösung auch für mehrere Empfänger gleichzeitig funktionieren?
mkinzler - Fr 24.07.09 14:41
Hierfür würde sich einen Named Pipe anbieten
Tastaro - 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 - Mo 27.07.09 19:14
Ja und,
Tastaro - hilft denn meine Thread-Angabe weiter?
dummzeuch - 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 - 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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!