• Jueves 14 de Noviembre de 2024, 04:08

Autor Tema:  Malloc Y El Shellexecute  (Leído 1511 veces)

DC740

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Malloc Y El Shellexecute
« en: Viernes 7 de Enero de 2005, 07:58 »
0
bueno mi problema es el siguiente, estaba modificando un programa para q compilara una aplicacion directamente desde el menu y mientras creaba un programa de prueba para mi funcion me encontre con este problema, antes habia probado el shellexecute y funcionaba bien, pero ahora, despues de asignarle la memoria dinamicamente a la variable del argumento, dejo de funcionarrr

#include <windows.h>
#include <stdio.h>

int main()
   
   {
   char *pargs;
   int memoryalloc;

   char archivo[6]; //esta es una variable de prueba
//en el programa original ya existe una variable q apunta al nombre completo
//del archivo abierto junto con el path

   printf("nombre del archivo a compilar: \n",0);
   gets(archivo);
/* calculo la memoria agregandole 14 q es lo q pesa el string q le sumo despues al argumento para hacer un argumento con varias cosas*/
   memoryalloc=sizeof(archivo)+14;

   pargs= (char *) malloc(memoryalloc); //asigno la memoria al string q contiene los argunmentos
   strcpy(pargs,archivo);//copio el archivo al primer lugar del argumento

   strcat(pargs," > report.txt");//copio el segundo argumento
/*
aca uso xsmos(un compilador)para compilar archivo, y supuestamente guardo la salida en report.txt pero no para nada y no funciona
*/
   ShellExecute(NULL,"open","xsmos.exe /mos ",pargs,".\\",SW_SHOWNORMAL);
         free(pargs);//libero memoria

return 0;//me fui
   }

el programa compila bien, si falta algo o lo copie mal simplemente diganme q lo copio otra vez, espero q puedan ayudarme porke ya probe de todo y no se q hacer... muchas gracias

DC740

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Malloc Y El Shellexecute
« Respuesta #1 en: Viernes 7 de Enero de 2005, 18:01 »
0
:unsure: estuve buscando y segui probando posibilidades, esta vez intente con el createprocess pero sigue sin funcionar, rekiere alguna condicion especial q yo no estoy contemplando? aca esta el codigo del nuevo programa, es exactamente lo mismo pero con el createprocess, encima estuve buscando mucho por la web, pero no logro encontrar nada, estare buscando mal?? :alien:

   #include <windows.h>
   #include <stdio.h>

   int main()
   
   {
         char *pargs;
         int memoryalloc;
         char archivo[6];
         
         PROCESS_INFORMATION processInfo;
         STARTUPINFO startupInfo;
         startupInfo.cb = sizeof(startupInfo);
         
         printf("nombre del archivo a compilar: \n",0);
         gets(archivo);
               
         memoryalloc=sizeof(archivo)+14;
         
         pargs= (char *) malloc(memoryalloc);
         strcpy(pargs,archivo);
         
         strcat(pargs," > report.txt");
         
         
//         ShellExecute(NULL,"open","xsmos.exe /mos ",(char *)pargs,".\\",SW_SHOWNORMAL);
         CreateProcess(archivo, (char *)pargs,
                        NULL,  // process security
                        NULL,  // thread security
                        FALSE, // no inheritance
                        0,     // no startup flags
                        NULL,  // no special environment
                        NULL,  // default startup directory
                        &startupInfo,
                        &processInfo);
         free(pargs);


   }


espero q puedan orientarme, desde ya, muchas gracias  :hola:

DC740

  • Nuevo Miembro
  • *
  • Mensajes: 7
    • Ver Perfil
Re: Malloc Y El Shellexecute
« Respuesta #2 en: Sábado 8 de Enero de 2005, 05:41 »
0
encontre la solucion!!! parece q el shell execute y el create process lo q hacen es ejecutar de la siguiente forma

forma correcta:
ShellExecute(NULL, "open", "xsmos.exe",  " /mos str.c", NULL, SW_SHOWDEFAULT);
forma incorrecta:
ShellExecute(NULL, "open", "xsmos.exe /mos ",  "str.c", NULL, SW_SHOWDEFAULT);

cuando lee el nombre del ejecutable no lo hace como la funcion system q simplemente ejecuta eso, sino q diferencia los espacios, entonces no se pueden agregar NINGUN argumento incluido dentro de la parte del nombre del ejecutable, si o si es necesario oncluirlo en la parte de argunmentos, y los argumentos tambien tienen una condicion, el uso del famoso > para redireccionar no esta permitido!!! es decir q si yo pongo en los argumentos " /mos str.c > salida.txt",  el programa q lo abra me va a decir "no se puede encontrar el archivo '>'" y tambien "no se puede encontrar el archivo 'salida.txt'" q es exactamente lo q me aparecio a mi despues de lograr ejecutar la aplicacion, bueno espero q les sirva mi experiencia, hasta la proxima y muchas gracias de todas formas