Entwickler-Ecke
Windows API - Merkwürdigkeit mit einer Pipe zu einem anderen Programm
GuaAck - Fr 19.08.22 23:28
Titel: Merkwürdigkeit mit einer Pipe zu einem anderen Programm
Hallo,
ich arbeite gern mit Arduinos, da gibt es nützliche Hilfsprogramme zur Analyse, die aber nur Konsolenanwendungen sind, also über "Ausführen" gestartet werden müssen. Da mir das zu umständlich ist, habe ich in Delphi ein Programm gemacht, was mir die von mir genutzten Hilfsprogramme mit den von mir genutzten Options anzeigt. Auf ein Click auf einen Start-Button wird das Hilfsprogramm gestartet. Zur Kommunikation mit dem Hilfsprogramm habe mit CreatePipe eine Pipe eingerichtet. Das Ergebnis des Hilfsprogramms erhalte ich über die Pipe zurück und zeige es in einem TMemo an. Es geht wunderbar.
Mein Problem: Alle diese Hilfsprogramme kennen eine Option "-h" was als Hilfe die Bedeutung aller Options listet. Merkwürdig: Das geht nur bei einigen der Hilfsprogrammen. Über "Ausführen" geht es bei allen Hilfsprogrammen.
Ein Beispiel (Leerzeichen sind wichtig):
"avr-size -x -t D:\...\meinProgramm.elf" geht
"avr-size -h" geht nicht über Delphi, aber über "Ausführen.
Sinngemäß für ein anderes Hilfsprogramm ("avr-nm.exe") geht es auch über Delphi.
Ich habe schon an verschiedenen Stelle Sleeps eingebaut, um Zeitprobleme auszuschließen, ohne Erfolg.
Kann es sein, dass ein Konsolenprogramm Ausgaben macht, die nicht auch in die Pipe geschrieben werden? Oder hat jemand sonst eine Idee?
Grüße
GuaAck
Th69 - Sa 20.08.22 09:26
Was ich mir vorstellen könnte, wäre, daß anstatt auf STDOUT auf STDERR der Hilfetext ausgegeben wird (dies wäre aber eigentlich sehr merkwürdig).
Ob das so stimmt und wie man an dessen Daten per Pipe kommt, weiß ich jedoch nicht.
jaenicke - Sa 20.08.22 12:20
Dafür kann man eine zweite passende Pipe aufmachen. Aus Versehen landet aber nichts in der falschen Pipe.
Ohne ein nachvollziehbares Beispiel lässt sich dazu aber wenig sagen. Wie wäre es, wenn du beide Programme auf ein Minimum reduzierst (je nachdem wie viel davon du hier veröffentlichen würdest) und die Projekte hier anhängst? So dass eben mindestens noch das Starten des anderen Projekts und dessen Ausgabe drin sind?
GuaAck - Sa 20.08.22 19:49
Danke, Ihr seit genial!!! Ich werde das mal versuchen zu lösen, evtl. kann man ja stderr auf stdout umleiten.
Gruß
GuaAck
GuaAck - Sa 20.08.22 22:25
Hallo, voller Erfolg!
Man muss nur bei "CreateProcess" in "StartupInfo" den "Pipe.Input" auch dem "StdError" zuweisen.
Danke nochmals,
Gruß GuaAck
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 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!