Return data to calling application.

BlitzMax Forums/BlitzMax Programming/Return data to calling application.

MattVonFat(Posted 2005) [#1]
Hi. I call a BMax exe with B+ using ExecFile and i want to be able to tell the calling program that the BMax exe has finished what it is doing. Is there anyway to do this?


ziggy(Posted 2005) [#2]
you should use this APIs:
OpenProcess (to start the 'child application')
GetExitCodeProcess (to check if it's running and, if ended, get the ending code).
OpenProcess returns a handler (Int of 32 bits), that can be passed as a parameter to GetExitCode to check if the appication is still running, and if it has exited, you can get also the exit code (errorlevel).
I don't have this API declaration statements now... I'll try to find them (I should have them somewhere...).

I don't know if ExecFile returns a process handler, if it does, you just need the API GetExitCodeProcess


MattVonFat(Posted 2005) [#3]
Ok. Thanks very much!


MattVonFat(Posted 2005) [#4]
Hi. I got the handle of the created process using CreateProcess but GetExitCode doesnt work. I tested it with notepad but when i closed it the GetExitCode retuned nothing at all.


ziggy(Posted 2005) [#5]
What do you mean nothing at all? you mean a zero?
If it returns zero, it means the application has clossed well. diferent that zero, it means it has got some errors. (and the value is the errorlevel returned by the application).


MattVonFat(Posted 2005) [#6]
OK i think i was getting a problem becasue i was using B+ (its in this forum because i though i had to do something within BMax originally) and i was using the B+ CreateProcess. So i've moved into Max now to keep within the rules :P and here is my code (the CreateProcess isn't even working now):



So would you be able to help me with this? Oh and the 666 is because i want it to exit the loop when the exit code is ok.


ziggy(Posted 2005) [#7]
Trye declaring all strings to Byte ptr, and passing the string.ToCString as parameters, instead of the the strings.
I mean:
Function CreateProcess:Int(AppName:Byte ptr,CommandLine:Byte ptr,Security:Int,Thread:Int,Inherit,Flag:Int,Environ:Int,Dir:Byte ptr,Startup,Process)

and calling:
CreateProcess(AppNameVariable.ToCString(), CommandLineVariable.ToCString(), etc....)