Autor |
Beitrag |
LittleBen
      
Beiträge: 258
Erhaltene Danke: 4
Win 7, Mac OS
Delphi 7
|
Verfasst: Mi 15.02.12 22:32
Hallo zusammen,
mit meinem Programm will ich ein Record zu einem anderen Programm schicken. Funktioniert eigentlich auch ganz gut:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| var RText: PText; cds: TCopyDataStruct; h: THandle; begin GetMem(RText, sizeof(TText)); try
RText.Text:= 'Text';
cds.dwData:= 0; cds.cbData:= sizeof(TText); cds.lpData:= RText;
h:= FindWindow(nil, 'Receiver'); if h<>0 then begin SendMessage(h, WM_COPYDATA, 0, Integer(@cds)); end else;
finally FreeMem(RText, sizeof(TText)); end; |
Nur will ich nicht, dass nach dem Senden auf eine Empfangsbestätigung gewartet wird. Und dafür ist ja das Postmessage geeignet. Habe aber gelesen, dass Postmessage mit WM_COPYDATA nicht funktioniert...
Was könnte machen, um das Record einfach nur weg zu feuern? (Fire and forget^^)
Viele Grüße,
Littleben
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 15.02.12 23:56
Theoretisch könntest du vielleicht einen Speicherbereich reservieren und auf der anderen Seite freigeben. Aber wozu? Es gibt doch genug sinnvollere Wege...
Seien es MMFs, Named Pipes, ...
Je nach Anwendungszweck kannst du nehmen was am besten passt. Mit MMFs kannst du einen gemeinsamen Speicherbereich umsetzen, mit Names Pipes Daten auf einer Seite schicken und auf der anderen empfangen. Und je nachdem was du machen willst gibt es auch noch einige Möglichkeiten mehr.
Außerdem gibt es eigentlich keine große Verzögerung bei der Messagebehandlung, wenn du SendMessage benutzt. Du darfst natürlich auf Empfängerseite nicht die ganze Behandlung durchführen bevor du die Antwort schickst...
|
|
LittleBen 
      
Beiträge: 258
Erhaltene Danke: 4
Win 7, Mac OS
Delphi 7
|
Verfasst: Do 16.02.12 14:38
jaenicke hat folgendes geschrieben : | Außerdem gibt es eigentlich keine große Verzögerung bei der Messagebehandlung, wenn du SendMessage benutzt. Du darfst natürlich auf Empfängerseite nicht die ganze Behandlung durchführen bevor du die Antwort schickst... |
Das ist mein Problem. Denn dirket beim Empfangen des Records führe ich eine Prozedur aus, die ca. 2 Sekunden dauert. Theoretisch müsste ich vor dieser Prozedur erst die Antwort schicken...aber wie mach ich das?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 16.02.12 14:49
Wie in der Doku steht:
Daten rauskopieren und die Botschaftsbehandlung verlassen. Danach die Daten dann bearbeiten. Zum Beispiel indem du dir selbst eine Message im Empfangsprogramm schickst.
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 16.02.12 14:51
Eine Möglichkeit wäre, im MessageHandler von "DoSomething", die vom fremden Prozess gesendet wurde, nur eine Message "ReallyDoSomething" an sich selbst abzusenden, wo dann die eigentliche Aufgabe erledigt wird.
_________________ We are, we were and will not be.
|
|
LittleBen 
      
Beiträge: 258
Erhaltene Danke: 4
Win 7, Mac OS
Delphi 7
|
Verfasst: Do 16.02.12 15:24
Das ist eine gute Idee!! Aber die eigene Nachricht muss dann natürlich mit PostMessage abgeschickt werden, sonst kommt ja das gleiche raus.
Vieelen Dank! Funktioniert wunderbar
Grüße,
Littleben
|
|
|