Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: joelmanx en 9 Octubre 2010, 07:39 am



Título: Capturar el argumento del Main en una cadena?
Publicado por: joelmanx en 9 Octubre 2010, 07:39 am
hola a todos quiero que me ayuden por favor, a capturar el argumento, que recibe el metodo main, para poder trabajar con el.
Código:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <shellapi.h>
void main(int ARGC,char *ARGV[])
{   
   
system("javaw -cp ExeJava.jar MainClassJava \"ARGV\" ");
 
}

es decir que quiero capturar ARGV, es que quiero capturarlo para luego, pasarlo como parametro a otra aplicacion.

en el codigo que muestro no me resulta, me ayudan a mejorarlo?
como me sugieren que lo haga?


Título: Re: Capturar el argumento del Main en una cadena?
Publicado por: do-while en 9 Octubre 2010, 08:32 am
¡Buenas!

Solo dos detalles.

El primer argumento de main puedes llamarlo, argc como en la forma tradicional, numeroParametros que es mas descriptivo en castellano o si quieres Juan lo cual no tiene ningun sentido, pero sirve para expresar que puedes utilizar cualquier identificador para nombrarlo, siempre y cuando te aclares, como con cualquier variable. Este primer parametro te indica cuantos argumentos ha recivido el programa y se le añade uno, porque el mismo nombre del programa es tambien un argumento (el primero).

El segundo argumento de la funcion main, es un vector (array) que contiene las cadenas que representan los distintos argumentos que has pasado al programa. El primero de ellos sera el nombre del propio programa, y el resto los argumentos propios.

No se que es lo que quieres hacer exactamente, pero esta descripcion la deberas adaptar a tus necesidades segun devas llamar a una funcion o programa ageno a main. Esta es la descripcion en C de los argumentos del programa. Ahora tendras que adaptarlos a lo que tu quieras, y por supesto, tendras que conocer bien como funciona el objeto de tu llamada, para poder adaptar lo arriba descrito a tus obejtivos.

¡Saludos!


Título: Re: Capturar el argumento del Main en una cadena?
Publicado por: Eternal Idol en 9 Octubre 2010, 16:21 pm
Tal vez te venga bien esta funcion:
GetCommandLine (http://msdn.microsoft.com/en-us/library/ms683156%28VS.85%29.aspx)


Título: Re: Capturar el argumento del Main en una cadena?
Publicado por: joelmanx en 9 Octubre 2010, 16:42 pm
gracias por sus respuestas, lo que quiero hacer exactamente, es capturar el argumento, para poder pasarlo como argumento a otra aplicacion, considero que mi problema principal, es concatenar esa cadena del argumento con otro char[](disculpen mi ignoracia, pero de C no se mucho), creo que se puede concatenar con la funcion strcpy;

Lh: No hagas doble post, utiliza el botón modificar.

esto estoy intentando:
Código
  1. char* codigo;
  2.  
  3.    if(ARGC==1)
  4.    {
  5.        codigo=" /C java -cp EvSIG.jar -Xmx500M com.pronefa.sig.main.MainExe";
  6.  
  7.    } else {
  8.         codigo=" /C java -cp EvSIG.jar -Xmx500M com.pronefa.sig.main.MainExe";
  9.  
  10.         strcpy(codigo,argv[1]);
  11.  
  12.    }
  13.  
  14. ShellExecute(NULL,"open","cmd.exe",codigo,NULL,SW_HIDE);
  15.  


no corre, se me cuelga la app, creo q en strcpy esta el error;


Título: Re: Capturar el argumento del Main en una cadena?
Publicado por: Littlehorse en 9 Octubre 2010, 17:35 pm
Lo que te recomendaría es que primero leas sobre memoria dinámica y manejo de cadenas.
Las cadenas no se asignan, y antes de hacer una copia o una concatenación con ese puntero primero necesitas reservar memoria (malloc, por ejemplo)

Utiliza el buscador (http://foro.elhacker.net/buscar) y encontraras varios ejemplos de ambas cosas. Igualmente tambien podes ver aca (http://www.cplusplus.com/reference/clibrary/cstring/) las funciones estándar para el manejo de cadenas y aca (http://www.cplusplus.com/reference/clibrary/cstdlib/malloc/) tenes un ejemplo de memoria dinámica con malloc.

Si no estas leyendo ningún libro, te recomiendo que busques alguno en el hilo que esta en las chinchetas.

Saludos


Título: Re: Capturar el argumento del Main en una cadena?
Publicado por: xassiz~ en 9 Octubre 2010, 22:03 pm
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<string.h>
  4.  
  5. int main(int argc, char *argv[])
  6. {  
  7.    char cadena[100]="javaw -cp ExeJava.jar MainClassJava";
  8.    if(argc==1){
  9.        printf("No hay argumentos\n");
  10.        return 1;
  11.    }
  12.    sprintf(cadena, "%s %s", cadena, argv[1]);
  13.    system(cadena);
  14.    return 0;  
  15. }


Título: Re: Capturar el argumento del Main en una cadena?
Publicado por: joelmanx en 10 Octubre 2010, 04:31 am
muchas gracias pablomi, con esto ya logre hacer el lanzador para mi programa en java, y que ademas puedo pasarle los argumentos al mismo.
Código:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <shellapi.h>
#include <string.h>

int main(int ARGC,char *argv[])
{   
 int i;
 char codigo[500]=" /C javaw.exe -cp EvSIG.jar -Xmx500M com.MainExe";
;

    if(ARGC==1)
    {/**
    no tiene argumento*/ 
    } else {
      sprintf(codigo, "%s \"%s\"", codigo, argv[1]);
         printf(codigo);
    }   
   ShellExecute(NULL,"open","cmd.exe",codigo,NULL,SW_HIDE);
  return 0;

}