Seite 1 von 1

Process-Problem

Verfasst: 11.06.2014 14:19
von es_91
Hi.

Ich habe ein ziemlich großes Programm A geschrieben, dieses soll ein Programm B aufrufen und einen Wert oder einen String von diesem zurückerhalten.

Wie geht das? Wie ermittle ich von Programm B aus die ID von Programm A, um per WriteProgramString() auf dieses zuzugreifen?

Programm B soll also wie eine Funktion funktionieren, Werte per ProgramParameter() übernehmen und einen Rückgabewert abliefern. Geht das überhaupt?

Schöne Grüße,

es_91.

Re: Process-Problem

Verfasst: 11.06.2014 19:53
von TroaX
The Gimp ist das beste Beispiel, das so etwas geht. Denn wenn du einen Filter aufrufst, ist dieser als kompilierte Executable vorhanden. Du rufst zum Beispiel mit Parametern das Programm B aus Programm A heraus mit RunProgram auf. Danach kannst du aus Programm A heraus per ReadProgramString die Rückgabe, die Programm B per WriteProgramString liefert auslesen.

Re: Process-Problem

Verfasst: 11.06.2014 20:21
von es_91
TroaX hat geschrieben:... die Programm B per WriteProgramString liefert auslesen.
Aber WriteProgramString() braucht doch eine ProgramID. Wie bekomme ich die von Programm B aus heraus?

Übrigens: danke für Deine interessanten Informationen. :D

Re: Process-Problem

Verfasst: 11.06.2014 20:28
von Kiffi
es_91 hat geschrieben:Aber WriteProgramString() braucht doch eine ProgramID. Wie bekomme ich die von Programm B aus heraus?
http://purebasic.com/german/documentati ... ramid.html

Grüße ... Kiffi

Re: Process-Problem

Verfasst: 11.06.2014 20:30
von Danilo
Normalerweise ist das so gedacht, dass Programm B einfach an eine Konsole ausgibt (PrintN() usw.),
und Program A diese Ausgaben liest. Warum möchtest Du WriteProgramString() statt PrintN() nehmen?

Re: Process-Problem

Verfasst: 12.06.2014 09:44
von es_91
Irgendetwas begreife ich noch immer nicht.
Kiffi hat geschrieben:
es_91 hat geschrieben:Aber WriteProgramString() braucht doch eine ProgramID. Wie bekomme ich die von Programm B aus heraus?
http://purebasic.com/german/documentati ... ramid.html
... und ProgramID() braucht ein 'Program', wo bekomme ich das her?
Danilo hat geschrieben:Normalerweise ist das so gedacht, dass Programm B einfach an eine Konsole ausgibt (PrintN() usw.),
...
Achso, alles klar. Das probiere ich gleich mal aus.

/EDIT: @Danilo Warum geht das nicht?

test.pb --> test.exe

Code: Alles auswählen

OpenConsole()

PrintN("Hallo, Welt!")

CloseConsole()
teststart.pb --> ausführen!

Code: Alles auswählen

Program = RunProgram("test.exe", "", "",  #PB_Program_Open | #PB_Program_Write)

String$ = ReadProgramString(Program)

Debug String$
... ?

/EDIT2: Deshalb:

Code: Alles auswählen

#PB_Program_Write
Die Zeile muss heißen:

Code: Alles auswählen

Program = RunProgram("test.exe", "", "",  #PB_Program_Open | #PB_Program_Read)
Danke, Danilo !!!

Re: Process-Problem

Verfasst: 12.06.2014 09:46
von RSBasic
"Program" ist der Rückgabewert von RunProgram().
Steht aber auch in der Hilfe.

Re: Process-Problem

Verfasst: 12.06.2014 09:53
von es_91
RSBasic hat geschrieben:"Program" ist der Rückgabewert von RunProgram().
Steht aber auch in der Hilfe.
Ja, ihr Lieben, das weiß ich alles, das habe ich auch gelesen. Aber Program B ruft doch nicht Program A auf, sondern Program A ruft Program B auf! Da hat Program B weder ein RunProgram(), noch eine ProgramID in sich!!! :)

/EDIT: Problem gelöst, siehe meinem vorherigen Post. Viele Dank an Alle Beteiligten!

Re: Process-Problem

Verfasst: 12.06.2014 10:00
von es_91
Das klingt gut. Ich schau mir das gleich mal an. Vielen Dank, RSBasic.

/EDIT: Wo ist denn der Beitrag von RSBasic hin? Mit den Callbacks? :o

Re: Process-Problem

Verfasst: 12.06.2014 10:03
von RSBasic
Oh sorry. Als ich deinen Edit sah, dass es sich erledigt hat, hab ich meinen Post wieder entfernt.

Hier als "Backup":
RSBasic hat geschrieben: Achso sorrry. ;)
Alternativ könntest du ein Callback nutzen, um Nachrichten während der Laufzeit zu verschicken.
http://www.rsbasic.de/aktualisierung/wi ... mserver.pb
http://www.rsbasic.de/aktualisierung/wi ... mclient.pb
Vielleicht ist es sogar besser für dein Vorhaben.
Entweder bin ich zu schnell oder zu langsam. :D