free096
asked on
Excution of External program
I'm studying Excution of external program. I want a sample code which execute another. The main (Host) application is C++ window program and sub (client) program is based on C or C++. NOT DLL! Processing can be a simple code like 'C=A+B'. Please let me know how process it is. I want to sample! (I know it may bother you if making a sample. ^^, )
Just use CreateProcess()
ASKER
I said I needed sample which can run. I can not do it though I know CreateProcess() function.
Sorry, you need a sample.
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInformation;
char pathbuf[_MAX_PATH];
GetStartupInfo(&StartupInf o);
strcat(pathbuf, "\\path\\a.exe");
CreateProcess(NULL, pszHomeDir, NULL, NULL, FALSE, CREATE_NEW_PROCESS_GROUP | NORMAL_PRIORITY_CLASS, NULL, NULL, &StartupInfo, &ProcessInformation);
I assume that you are using windows, besides CreateProcess, you can also use WinExec(). Another alternative is to use system(), which is a C runtime function so it is also available on other platforms. However, on windows, CreateProcess() is better.
On UNIX, you can use fork() and execle() (or execlp, execvp ...). Well, you mentioned Windows, so forget about this.
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInformation;
char pathbuf[_MAX_PATH];
GetStartupInfo(&StartupInf
strcat(pathbuf, "\\path\\a.exe");
CreateProcess(NULL, pszHomeDir, NULL, NULL, FALSE, CREATE_NEW_PROCESS_GROUP | NORMAL_PRIORITY_CLASS, NULL, NULL, &StartupInfo, &ProcessInformation);
I assume that you are using windows, besides CreateProcess, you can also use WinExec(). Another alternative is to use system(), which is a C runtime function so it is also available on other platforms. However, on windows, CreateProcess() is better.
On UNIX, you can use fork() and execle() (or execlp, execvp ...). Well, you mentioned Windows, so forget about this.
Let me know if you have problem using it.
ASKER
Thanks, faster. But still I don't know How app. can exchange data with Client app. Yea, OS is windows, of course. Would you mind showing me both sample of Client & Host which can exchange data like 'C = A + B'. (input A & B into Host, Client calculate it, and Host must show the result, C)
I see, you are actually talking about IPC. There are a lot of ways to do it depending on what kind of messages you need to exchange between the parent and the child. So could you let me know the type and size of the messages (both direction) and do they exchange information frequently or simply a one time process?
ASKER
Thanks, faster, again. Actually I have not heard about IPC. So I have no idea. Are there so many kinds of IPC? Hm... ^^, First of all I want to know just SIMPLE calculation, C=A+B. (It's the starting point. ^^;) I think it's one time process: Host send A&B to Client. and Client send the result, C(=A+B) to Host. And interger type is enough. Can you show me the samples of both Host and Client?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Note that the server->child communication is by command line, other simple choices include env variable. But they can only be one time. Better and more complex way include using a pipe, using windows message (create a window in child), socket, OLE etc. Child->parent is done using an exit status, this can only work for integer. A better and still easy way is to use windows message, I mean to create a window in parent with a fixed window name, then the child can find the window handle and then use WM_COPYDATA or other messages to pass data back. Pipe, socket, OLE etc give you more control.
What does the ** in front of the argv means?? in
int main(int argc, char **argv)
Thanks!
Regards,
Viktor Ivanov
int main(int argc, char **argv)
Thanks!
Regards,
Viktor Ivanov
** means a pointer to a list of pointers, that is the standard C stuff
ASKER
Thanks, faster. Your code has some error to debug. Anyway, it looks pretty good. I'll try it. After this, if I had more question, I would ask you. Could I know your Email address? (If question, I'll notify you.)