Hallo,
hab schon mehrmals geschrieben und noch das gleiche Problem:
Ich habe die visuelle Komponente
TDosCommand in meinem Programm (mit deren Hilfe kann man realtiv einfach Befehlszeilenprogramme ausführen und deren Text-Output abfangen).
Doch jedesmal, wenn ich im Programm DosCommand mit der Funktion
Execute gestartet habe und das Konsolenprogramm ausgeführt wurde, habe ich zum Teil Probleme mit Dialogen (angezeigt per Funktion
MessageDlg) und Formularen: sie werden verstümmelt, bzw. unvollständig dargestellt. Schließt man das Formular, kommt manchmal gar eine Excpetion "ungültiges Fensterhandle".
Ich bin mir jetzt ziemlich sicher, woran das Problem liegt: im SourceCode von TDosCommand.
TDosCommand ist von der Klasse TObject abgeleitet und läuft also mit dem Haupthread der Application.
Allerdings startet TDosCommand einen seperaten Thread (TThread), in dem dann das gewünschte Befehlszeilenprogramm ausgeführt wird. Nach Beendigung des Programms wird der Thread aufgelöst.
TDosCommand enthält zwar eine Variable
Delphi-Quelltext
1:
| property Sync: TMultiReadExclusiveWriteSynchronizer read FSync; |
allerdings glaube ich, dass die Synchronisation per BeginWrite, EndWrite (bzw. BeginRead, EndRead) zwischen den beiden Threads nicht so ganz klappt und ich deswegen Speicherverletzungen habe...
Leider kenne ich mich mit Multithreading nicht sehr gut aus und die Hilfe ist indem Fall auch nicht gerade eine - Hilfe.
Deswegen meine Bitte: Falls sich jemand mit dem Thema auskennt, könnte er - wäre mir eine Riesenhilfe - den Sourcecode von TDsoCommand mal schnell überfliegen, ob er so stimmt!
Thanks a lot
Frankie