Parameter von aufgerufenem Programm zurückgeben?

Anfängerfragen zum Programmieren mit PureBasic.
Zomtec
Beiträge: 33
Registriert: 07.06.2005 14:46
Wohnort: Bayern
Kontaktdaten:

Parameter von aufgerufenem Programm zurückgeben?

Beitrag von Zomtec »

Hallo Leute,

gibt's eine einfache Möglichkeit, Parameter von einem aufgerufenen Programm (beides PB-Programme) zurückzugeben?

Also vom Hauptrogramm Programm2 aufrufen und die Rückgabe in einen String bekommen z. B. so in der Art:

Code: Alles auswählen

If RunProgram("Programm2", Parameter$, "") : endif
rueckgabe$=???
mfg
Zomtec
------------
noch PB 3.94
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Naja, du kannst mit End exitcodes angeben, z.b. end 123, damit jedoch ganze strings zu übergeben ist aber problematisch, ich weiß nicht ob´s geht, aber villeicht kannst du ja den Pointer auf einen string übergeben(mit @deinstring.s), den string kannst du dann ganz einfach mit PeekS(pPointerzumString) auslesen.
edit:
Ich hab mal etwas rumprobiert, aber hiermit hat´s schonmal micht funktioniert...
test.exe:

Code: Alles auswählen

param$=ProgramParameter()
*pMem=GlobalAlloc_(#GMEM_SHARE,Len(param$)+1)
CopyMemory(@param$,*pMem,Len(param$))
End *pMem
anderesprogramm:

Code: Alles auswählen

NewList StartupInfo.STARTUPINFO()
NewList ProcInfo.PROCESS_INFORMATION()
AddElement(StartupInfo())
AddElement(ProcInfo())

If CreateProcess_("test.exe","test.exe testparameter",0,0,0,0,0,".",@StartupInfo(),@ProcInfo())
  Delay(200)
  code.l
  GetExitCodeProcess_(ProcInfo()\hProcess,@code)
  Debug GlobalSize_(code)
  Debug PeekS(code)
  GlobalFree_(code)
EndIf
Mir kommt´s fast so vor, als gibt PB den speicher wieder frei, wen man end aufruft, dabei hab ich ihn doch extra global angefordert...Bild
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Benutzeravatar
Macros
Beiträge: 1361
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Aber man konnte den String doch in den Speicher schreiben (wenn er kurz ist),
mit Peekl() auslesen, das als Exitcode setzen, dann beim Anderen Programm
wieder in Speicher und mit PeekS() auslesen.
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

In PB v4 gibts die Process Lib dafür.

Da sollte das z.B. auch über Umgebungsvariablen gehen.
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Zomtec
Beiträge: 33
Registriert: 07.06.2005 14:46
Wohnort: Bayern
Kontaktdaten:

Beitrag von Zomtec »

Danke für eure Antworten. Habe jetzt was in der PBOSL gefunden, das meiner gesuchten Funktion entsprechen könnte:
PBOSL_AllocateMemoryGlobal(Name.s, Size.l)

Parameters:
Name.s = Name des Speciherbereichs als String, Handle
Size.l = Größe des Speicherbereichs in Bytes

Return Values: The memory-adress

Description: Gibt den Zeiger auf den Speicherbereich zurück (wie in PB-Funktion Allocatememory)
Habe es mangels Zeit bisher leider noch nicht testen können. Der Exitcode wird doch an die Windowsvariable %errorlevel% übergeben. Lässt sich diese so einfach von einem Windowsprogramm auslesen?
mfg
Zomtec
------------
noch PB 3.94
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Umgebungsvariablen kannst du ganz einfach mit

Code: Alles auswählen

variable.s="SystemDrive"
Inhalt.s=Space(#MAX_PATH)
GetEnvironmentVariable_(variable,@Inhalt,#MAX_PATH)
Debug Inhalt
abfragen.
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Aber mit dem ERRORLEVEL wird das in PB3.94 wahrscheinlich nicht funzen.
In PB4 wird sowas aber von Hause aus unterstützt. Auch das setzen. Wenn
man seine eigenen Variablen vor RunProgramm() setzt, sind diese im
anderem Programm auch ermittelbar.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
benpicco
Beiträge: 391
Registriert: 01.10.2004 15:32
Wohnort: im Code
Kontaktdaten:

Beitrag von benpicco »

Wenn die beiden Programme miteinander komunizieren sollen, ist es villeicht einfacher und schneller die nachrichten übers (lokale) Netzwerk zu schicken, das eine Programm ist dan der Client, das andere der Server.
Johann Wolfgang von Geothe hat geschrieben:Wie dieses oder jenes Wort geschrieben wird, darauf kommt es doch eigentlich nicht an, sondern darauf, daß die Leser verstehen, was man damit sagen wollte.
Antworten