Hallo allerseits,
Ich habe eine Frage zu einem Problem mit DDE. Ich weiß, dass das Verfahren veraltet ist, aber ich möchte ein ansonsten gutes altes Programm an dieser einen Problemstelle mit möglichst wenig Aufwand verbessern. Bitte schickt mir darum keine Vorschläge zu anderen Methoden der Kommunikation.
Mein Client verbindet sich mit dem Server so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| with MainDDEClientConv do
if ProcessExists('MyControlProgram.exe') then begin SetLink('MyControlProgram', 'ControlDDEServerConv'); OpenLink PokeDataLines('ControlDDEServerItem', TempStringList); CloseLink; end; |
Das funktioniert fast immer, außer wenn der Server gerade durch eine aufwendige Operation beschäftigt ist, z.B. eine 30 Sekunden lange Berechnung. Dieser seltene, aber mögliche Fall ist mein Problem. Denn wenn der Server beschäftigt ist, und dann offensichtlich nicht auf die Anfrage des Client sofort reagieren kann, erhalte ich vom Client genau dasselbe Fehlermeldungsfenster wie oben "File not found", obwohl der Prozess natürlich auch jetzt noch in Windows zu sehen ist.
Ich habe es mit einer Exception-Behandlung versucht:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| with MainDDEClientConv do
if ProcessExists('MyControlProgram.exe') then begin try SetLink('MyControlProgram', 'ControlDDEServerConv'); OpenLink PokeDataLines('ControlDDEServerItem', TempStringList); CloseLink; except on E: Exception do end; end; |
Diese Exception-Behandlung bringt aber nichts. In der Delphi-Hilfe habe ich auch keinen Hinweis gefunden, ob diese DDE-Funktionen überhaupt Exceptions auslösen.
Mein Problem ist eigentlich nur das Fehlermeldungsfenster, denn das muss ich erst von Hand wegklicken, bevor der Client weitermacht und dann in ein paar Sekunden die Anfrage wiederholt. Ich bräuchte also vermutlich nichts weiter ändern, wenn ich eine Möglichkeit finde, dieses Fehlermeldungsfenster automatisch verschwinden, oder gar nicht erst entstehen zu lassen.
Über Tipps würde ich mich sehr freuen.