AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi JvCreateProcess: Ausgabe von Konsolenanwendung abfragen
Thema durchsuchen
Ansicht
Themen-Optionen

JvCreateProcess: Ausgabe von Konsolenanwendung abfragen

Ein Thema von Passi077 · begonnen am 21. Apr 2009 · letzter Beitrag vom 23. Apr 2009
Antwort Antwort
Passi077

Registriert seit: 7. Okt 2004
23 Beiträge
 
#1

JvCreateProcess: Ausgabe von Konsolenanwendung abfragen

  Alt 21. Apr 2009, 23:07
Hi,

ich hab mir das Beispiel zu JvCreateProcess der JEDI Library angeschaut. Ich möchte damit ein C Konsolenprogramm steuern, und die Ausgaben auswerten.

Delphi-Quellcode:
procedure TForm1.StartCommandProcessor;
begin
  { Retrieve the command processor name }
  if not JclSysInfo.GetEnvironmentVar('COMSPEC', CommandLine) or (Length(CommandLine) = 0) then
    { Paranoid }
    CommandLine := 'COMMAND.EXE';

  JvCreateProcess1.CommandLine := CommandLine;
  { Redirect console output, we'll receive the output via the OnRead event }
  JvCreateProcess1.ConsoleOptions := JvCreateProcess1.ConsoleOptions + [coRedirect];
  { Hide the console window }
  JvCreateProcess1.StartupInfo.ShowWindow := swHide;
  JvCreateProcess1.StartupInfo.DefaultWindowState := False;
  { And start the console }

  JvCreateProcess1.Run;

end;

procedure TForm1.JvCreateProcess1Read(Sender: TObject; const S: String;
  const StartsOnNewLine: Boolean);
begin
  memo1.Lines.Add(s);
end;
Starte ich nun über den JvProcess eine C-Konsolenanwendung, so funktioniert das leider nicht komplett. Die C-Anwendung sieht ganz einfach aus:

Code:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int i=0;
  printf("testausgabe\n");
  scanf("%d", i);
  print("Zeichen eingelesen");
  return 0;
}
Leider wird mein Memo mit den Ausgaben erst befüllt, sobald die C-Anwendung beendet ist (es kommen dann alle Ausgaben auf einmal).

Woran liegt das, und wie ändere ich das so das jede Ausgabe der Konsolenanwendung sofort sichtbar ist?
Dabei ist es egal, ob ich das C-Programm oder das Delphi Programm anpassen muss.. ist beides ok

Danke + Grüße
Pascal
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#2

Re: JvCreateProcess: Ausgabe von Konsolenanwendung abfragen

  Alt 22. Apr 2009, 10:31
Ich kenne mich mit JvCreateProcess jetzt nicht besonders aus. Aber bei Lazarus z.B. besteht auch das Problem.

Die Komponente dürfte das Event wohl erst abfeuern, wenn ein interner Buffer voll ist. Wenn der nun bei z.B. 4KiB ist, aber nur 200 Bytes an Ausgabe existieren (jetzt mal übertrieben in einem Zeitraum von 5 Minuten), so wird das Event erst abgefeuert, wenn das externe Programm beendet wird.

Möglicherweise kannst du diesen Buffer auf 1 Byte runterschrauben, in einem Thread (z.B.) die Ausgabe mitlesen und dann bei jedem Zeilenumbruch eine eigene Methode aufrufen lassen.

Vielleicht existiert auch ein Event bei der Komponente, das die Ausgabe selber schon nach jedem Zeilenumbruch bekannt gibt.
  Mit Zitat antworten Zitat
Passi077

Registriert seit: 7. Okt 2004
23 Beiträge
 
#3

Re: JvCreateProcess: Ausgabe von Konsolenanwendung abfragen

  Alt 22. Apr 2009, 18:20
Hi,

vielen Dank für Deinen Hinweis, Du hast vollkommen Recht: das liegt an einem internen Buffer.
Habs gerade ausprobiert. Ab 4097 Byte Ausgabe kommt diese auch in meinem Delphi Programm an.

Leider hab ich keine Option für die JEDI Komponente gefunden, die es mir ermöglichen würde den Buffer zu verringern/auszuschalten.
Gibt es andere Möglichkeiten für mein Vorhaben? Muss nicht zwingend über die JEDI Komponente passieren, hatte mir nur erhofft das es damit schnell geht.

Viele Grüße
Pascal
  Mit Zitat antworten Zitat
DevilsCamp
(Gast)

n/a Beiträge
 
#4

Re: JvCreateProcess: Ausgabe von Konsolenanwendung abfragen

  Alt 22. Apr 2009, 20:00
Dir wird wohl nichts anderes übrig bleiben, als das ganze selber zu implementieren.
Vielleicht hilft dir DAS hier weiter.
  Mit Zitat antworten Zitat
Passi077

Registriert seit: 7. Okt 2004
23 Beiträge
 
#5

Re: JvCreateProcess: Ausgabe von Konsolenanwendung abfragen

  Alt 23. Apr 2009, 23:14
Ok, Danke für die Hilfe.

Habs jetzt aber einfach so gemacht, dass ich vom C Programm aus WM_COPYDATA Messages an's Delphi Programm sende.
Die Ausgabe auszulesen hab ich nach ein paar Versuchen nicht hinbekommen, und für meine Zwecke reicht das mit den Messages vollkommen aus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz