ejecutar un programa de c++ desde otro programac++
Hola, espero puedas ayudarme de antemano de doy las gracias por tomarte tiempo para leer mi pregunta y ofrecer tu ayuda.
Mi duda es la siguiente, tengo un sistema. Es un proyecto que tiene 4 programas cpp, En el programa principal, se lleva a cabo un ciclo para ejecutarse un cierto numero de veces, pero se me genera un error cuando lo ejecuto un numero alto de veces, creo que tengo algun problema con apuntadores o algo por el estilo.
Ahora que:
Quiero elaborar un programa. y Que dentro de este programa ejecute automáticamente el programa principal del proyecto .exe(el proyecto lo vamos a llamar proydec.prj y el programa principal se llama proydec.cpp el cual es el ejecutable proydec.exe).
Para enviar el control del ciclo a este programa y que al terminar cada ejecución se liberen todos los apuntadores y variables del proyecto.
Existe una instrucción o algo así para ejecutar un programa de c++ desde otro de c++
Ojala me haya explicado bien. Espero tu respuesta.
Mi duda es la siguiente, tengo un sistema. Es un proyecto que tiene 4 programas cpp, En el programa principal, se lleva a cabo un ciclo para ejecutarse un cierto numero de veces, pero se me genera un error cuando lo ejecuto un numero alto de veces, creo que tengo algun problema con apuntadores o algo por el estilo.
Ahora que:
Quiero elaborar un programa. y Que dentro de este programa ejecute automáticamente el programa principal del proyecto .exe(el proyecto lo vamos a llamar proydec.prj y el programa principal se llama proydec.cpp el cual es el ejecutable proydec.exe).
Para enviar el control del ciclo a este programa y que al terminar cada ejecución se liberen todos los apuntadores y variables del proyecto.
Existe una instrucción o algo así para ejecutar un programa de c++ desde otro de c++
Ojala me haya explicado bien. Espero tu respuesta.
Para ejecutar un "ejecutable tienes el comando system, en el MSDN puedes encontrar más información
int system( const char *command );
ejemplo:
/* SYSTEM.C: This program uses
* system to TYPE its source file.
*/
#include <process.h>
void main( void )
{
system( "type system.c" );
}
int system( const char *command );
ejemplo:
/* SYSTEM.C: This program uses
* system to TYPE its source file.
*/
#include <process.h>
void main( void )
{
system( "type system.c" );
}
Existe otros comandos como el execv y execl que ejecutan un programa pasandole ademas los parametros de entrada de la linea de comandos. Mientras que el system es mas para la ejecucion de comandos (aunque ejecute ejecutables perfectamente, pues esto es un comando del SO), puedes usar tambien estos comandos.
De todas formas lo que quieres hacer es, si me lo permites, una chapuza, si te peta te aconsejo que pongas try-catch y compruebes siempre la memoria que liberas al estilo
char* pBuffer = NULL;
.
.
.
.
if (pBuffer) delete [] pBuffer;
De todas formas te adjunto el codigo de las MSDN de execv, ademas te recuerdo que este comando es de C++ Standard, no del Visual C++:
void main()
{
char *args[4], prog[80];
int ch;
printf( "Enter name of program to exec: " );
gets( prog );
printf( " 1. _execl 2. _execle 3. _execlp 4. _execlpen" );
printf( " 5. _execv 6. _execve 7. _execvp 8. _execvpen" );
printf( "Type a number from 1 to 8 (or 0 to quit): " );
ch = _getche();
if( (ch < '1') || (ch > '8') )
exit( 1 );
printf( "nn" );
/* Arguments for _execv? */
args[0] = prog;
args[1] = "exec??";
args[2] = "two";
args[3] = NULL;
switch( ch )
{
case '1':
_execl( prog, prog, "_execl", "two", NULL );
break;
case '2':
_execle( prog, prog, "_execle", "two", NULL, my_env );
break;
case '3':
_execlp( prog, prog, "_execlp", "two", NULL );
break;
case '4':
_execlpe( prog, prog, "_execlpe", "two", NULL, my_env );
break;
case '5':
_execv( prog, args );
break;
case '6':
_execve( prog, args, my_env );
break;
case '7':
_execvp( prog, args );
break;
case '8':
_execvpe( prog, args, my_env );
break;
default:
break;
}
/* This point is reached only if exec fails. */
printf( "nProcess was not execed." );
exit( 0 );
}
De todas formas lo que quieres hacer es, si me lo permites, una chapuza, si te peta te aconsejo que pongas try-catch y compruebes siempre la memoria que liberas al estilo
char* pBuffer = NULL;
.
.
.
.
if (pBuffer) delete [] pBuffer;
De todas formas te adjunto el codigo de las MSDN de execv, ademas te recuerdo que este comando es de C++ Standard, no del Visual C++:
void main()
{
char *args[4], prog[80];
int ch;
printf( "Enter name of program to exec: " );
gets( prog );
printf( " 1. _execl 2. _execle 3. _execlp 4. _execlpen" );
printf( " 5. _execv 6. _execve 7. _execvp 8. _execvpen" );
printf( "Type a number from 1 to 8 (or 0 to quit): " );
ch = _getche();
if( (ch < '1') || (ch > '8') )
exit( 1 );
printf( "nn" );
/* Arguments for _execv? */
args[0] = prog;
args[1] = "exec??";
args[2] = "two";
args[3] = NULL;
switch( ch )
{
case '1':
_execl( prog, prog, "_execl", "two", NULL );
break;
case '2':
_execle( prog, prog, "_execle", "two", NULL, my_env );
break;
case '3':
_execlp( prog, prog, "_execlp", "two", NULL );
break;
case '4':
_execlpe( prog, prog, "_execlpe", "two", NULL, my_env );
break;
case '5':
_execv( prog, args );
break;
case '6':
_execve( prog, args, my_env );
break;
case '7':
_execvp( prog, args );
break;
case '8':
_execvpe( prog, args, my_env );
break;
default:
break;
}
/* This point is reached only if exec fails. */
printf( "nProcess was not execed." );
exit( 0 );
}
Hola que bueno que encontré este foro!
Respecto del problema de ejecutar un programa desde otro programa, yo estoy usando Visual C++, y probé las dos opciones system y execv. Con execv el programa "llamador" (que pide ejecutar el otro programa) se cierra cuando se abre el programa "llamado", en cambio con system ambos permanecen abiertos. En mi caso me conviene system.
Ahora bien mi problema es que como estoy en windows no solo se abre la ventana del programa "llamado", sino que tambien se abre el programa cmd.exe de DOS! Cómo puedo evitar esto? es muy desprolijo! Existe alguna función de windows que mande a ejecutar?
Mil gracias!
Respecto del problema de ejecutar un programa desde otro programa, yo estoy usando Visual C++, y probé las dos opciones system y execv. Con execv el programa "llamador" (que pide ejecutar el otro programa) se cierra cuando se abre el programa "llamado", en cambio con system ambos permanecen abiertos. En mi caso me conviene system.
Ahora bien mi problema es que como estoy en windows no solo se abre la ventana del programa "llamado", sino que tambien se abre el programa cmd.exe de DOS! Cómo puedo evitar esto? es muy desprolijo! Existe alguna función de windows que mande a ejecutar?
Mil gracias!
