Process-Problem

Für allgemeine Fragen zur Programmierung mit PureBasic.
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Process-Problem

Beitrag 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.
Benutzeravatar
TroaX
Beiträge: 720
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: Process-Problem

Beitrag 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.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: N150 Mini-PC | 16 GB RAM | Debian 13+CasaOS
Coding: Purebasic, Spiderbasic, Gambas
Blog: https://techtroax.de
Repos: https://codeberg.org/TroaX
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Re: Process-Problem

Beitrag 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
Zuletzt geändert von es_91 am 11.06.2014 20:31, insgesamt 1-mal geändert.
Benutzeravatar
Kiffi
Beiträge: 10725
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Process-Problem

Beitrag 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
a²+b²=mc²
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: Process-Problem

Beitrag 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?
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Re: Process-Problem

Beitrag 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 !!!
Zuletzt geändert von es_91 am 12.06.2014 09:58, insgesamt 3-mal geändert.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Process-Problem

Beitrag von RSBasic »

"Program" ist der Rückgabewert von RunProgram().
Steht aber auch in der Hilfe.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Re: Process-Problem

Beitrag 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!
Zuletzt geändert von es_91 am 12.06.2014 09:59, insgesamt 1-mal geändert.
es_91
Beiträge: 411
Registriert: 25.01.2011 04:48

Re: Process-Problem

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Process-Problem

Beitrag 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
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten