none
Pasar argumentos al programa RRS feed

  • Pregunta

  • Buenas:

    Como veis soy nuevo en este foro pero espero estar bastante tiempo por aquí.

    Me gustaría saber como puedo pasarle al programa unos parametros y poder usarlos.

    Para pasarselos lo haría a traves de la consola de esta manera:
    miPrograma.exe dato1 dato2 dato3

    Yo soy de C pero a nivel muy muy basico (como ya lo notareis en la pregunta) y al usar visual studio c++ me he encontrado con el main asi:
    int main(array<System:Tongue Tiedtring ^> ^args)

    No tengo ni idea de como puedo leer los parametros mandados como ya he dicho y recurro a ustedes para que me ayuden.

    Gracias por su tiempo


    EDITADO:  El proyecto es una Aplicacion de windows Forms
    lunes, 28 de enero de 2008 17:28

Respuestas

  • En el main:

    Code Snippet

    int main(array<System::String ^> ^args)
    {
        // Habilitar los efectos visuales de Windows XP antes de crear ningún control
        Application::EnableVisualStyles();
        Application::SetCompatibleTextRenderingDefault(false);

        // Crear la ventana principal y ejecutarla
        Application::Run(gcnew Form1(args));
        return 0;
    }

     

     

     

    En el constructor de la forma:

     

    Code Snippet
    private :
      array<System::String ^> arrayParams;
        
    public:
            Form1(array<System::String ^> ^args) // void
            {
                arrayParams =args;
                InitializeComponent();
                //
                //TODO: agregar código de constructor aquí
                //
            }

     

    luego ya puedes usar dentro de la forma al objeto arrayParams

     

    ahh e incluye esto:

     

    using namespace System;

     

    y quita esto porque tu aplicacion no es de consola.:

    #include <stdio.h>

     

     

    lunes, 28 de enero de 2008 20:52
    Moderador
  • Creo que debería ser

    Code Snippet

    private :

            array<System::String ^> ^arrayParams;

    martes, 29 de enero de 2008 15:37

Todas las respuestas

  • Hola,

    Para ver el número de parámetros, usa args->Length.
    Para acceder a estos, args [ i ].

    Un saludo.
    lunes, 28 de enero de 2008 17:40
  • Hola:

    Me salta error:
    Error    1    error C2065: 'args' : identificador no declarado    d:\documents and settings\admin\mis documentos\visual studio 2005\projects\aprendiendo\aprendiendo\Form1.h    280   

    Dime si necesitas que de mas datos.
    lunes, 28 de enero de 2008 17:55
  • La variable args está en <NombreDeTuProyecto>.cpp

    Si la necesitas en Form1, deberías añadir la manera de pasársela desde aquí. Por ejemplo, en el constructor:

    Code Snippet

    Application::Run(gcnew Form1(args->Length));


    Y añadir un constructor con un parámetro:   

    Code Snippet

        public:
            Form1(void)
            {
                InitializeComponent();
                //
                //TODO: Add the constructor code here
                //
            }

            Form1(int ^f){
                this->Text = f->ToString();
            }


    Espero que ayude, un saludo.
    lunes, 28 de enero de 2008 18:16
  • Code Snippet
    #include <stdio.h> 
    int main(int argc, char **argv) 
    {    
       for(int i = 0; i < argc; i++)
           printf("%s", argv(i));
       return 0;
    }

     

     

    Lo tienes mal, mira el ejemplo compilalo, y luego ejecutalo desde consola pasando parametros y veras
    lunes, 28 de enero de 2008 18:21
    Moderador
  •  

    si estas usando C++ managed extensions (que es lo que parece) utiliza esto:

     

    Code Snippet

    int main(array<System::String ^> ^args)

    {

       for(int i=0; i< args->Length;i++)

       {

          Console::WriteLine(args[i]);

       }

       Console::ReadLine();

       return 0;

    }

     

     

    lunes, 28 de enero de 2008 18:26
    Moderador
  • Cada vez me siento mas tonto. Parece muy sencillo pero no consigo entenderlo.

    Lo que tengo es esto en aprendiendo.cpp:

    Code Snippet

    #include "stdafx.h"
    #include "Form1.h"

    using namespace aprendiendo;

    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
        // Habilitar los efectos visuales de Windows XP antes de crear ningún control
        Application::EnableVisualStyles();
        Application::SetCompatibleTextRenderingDefault(false);

        // Crear la ventana principal y ejecutarla
        Application::Run(gcnew Form1());
        return 0;
    }



    y esto en Form1.h:

    Code Snippet

    #pragma once


    namespace aprendiendo {

        using namespace System;
        using namespace System::ComponentModel;
        using namespace System::Collections;
        using namespace System::Windows::Forms;
        using namespace System::Data;
        using namespace System::Drawing;

        /// <summary>
        /// Resumen de Form1
        ///
        /// ADVERTENCIA: si cambia el nombre de esta clase, deberá cambiar la
        ///          propiedad 'Nombre de archivos de recursos' de la herramienta de compilación de recursos administrados
        ///          asociada con todos los archivos .resx de los que depende esta clase. De lo contrario,
        ///          los diseñadores no podrán interactuar correctamente con los
        ///          recursos adaptados asociados con este formulario.
        /// </summary>
        private ref class Form1 : public System::Windows::Forms::Form
        {
        public:
            Form1(void) // void
            {
                InitializeComponent();
                //
                //TODO: agregar código de constructor aquí
                //
            }

        public:
            /// <summary>
            /// Limpiar los recursos que se estén utilizando.
            /// </summary>
            ~Form1(void)
            {
                if (components)
                {
                    delete components;
                }
            }

        public: System::IO::Ports::SerialPort^  serie;
        private: System::Windows::Forms::Button^  boton1;
        public: ......

    .....

    ....

    ...



    lunes, 28 de enero de 2008 19:29
  •  

    Code Snippet
    #include "stdafx.h"
    #include "Form1.h"

    using namespace aprendiendo;

    [STAThreadAttribute]
    int main(array ^args)
    {
        // Habilitar los efectos visuales de Windows XP antes de crear ningún control
        Application::EnableVisualStyles();
        Application::SetCompatibleTextRenderingDefault(false);

        // Crear la ventana principal y ejecutarla
        Application::Run(gcnew Form1());
        return 0;
    }

     

     


    Eso es C++ + managed extensios... es decir c++ con '.net'.

     

    Pero no veo que uses los argumentos para nada, y sino los usas pues quitalos del main... el STATHREAD tampoco lo necesitas...

     

    Code Snippet

    #include "stdafx.h"
    #include "Form1.h"

    using namespace aprendiendo;

    int main()
    {
        // Habilitar los efectos visuales de Windows XP antes de crear ningún control
        Application::EnableVisualStyles();
        Application::SetCompatibleTextRenderingDefault(false);

        // Crear la ventana principal y ejecutarla
        Application::Run(gcnew Form1());
        return 0;
    }

     

     

    lunes, 28 de enero de 2008 19:34
    Moderador
  • Yo quiero usar los argumentos que le pase por la consola:
    Code Snippet

    miPrograma.exe dato1 dato2 dato3

    en el formulario.

    Todavia no los uso porque no se como pasarlos al formulario. Cuando intento desde el Form1 simplemente mostrarlos en una etiqueta me dice que args no especificado.

    EDITADO:
    Al escribir esto:
    Code Snippet

    #include "stdafx.h"
    #include "Form1.h"
    #include <stdio.h>

    using namespace puertoSeriePrueba;

    // [STAThreadAttribute]
    // int main(array<System::String ^> ^args)
    int main(int argc, char **argv)
    {
        // Habilitar los efectos visuales de Windows XP antes de crear ningún control
        Application::EnableVisualStyles();
        Application::SetCompatibleTextRenderingDefault(false);

        // Crear la ventana principal y ejecutarla
        Application::Run(gcnew Form1());
        return 0;
    }


    Me salta este error:
    Code Snippet

    Error    1    fatal error LNK1287: "int __clrcall main(int,char * *)" (?main@@$$HYMHHPAPAD@Z) de punto de entrada administrado no válido



    lunes, 28 de enero de 2008 20:42
  • En el main:

    Code Snippet

    int main(array<System::String ^> ^args)
    {
        // Habilitar los efectos visuales de Windows XP antes de crear ningún control
        Application::EnableVisualStyles();
        Application::SetCompatibleTextRenderingDefault(false);

        // Crear la ventana principal y ejecutarla
        Application::Run(gcnew Form1(args));
        return 0;
    }

     

     

     

    En el constructor de la forma:

     

    Code Snippet
    private :
      array<System::String ^> arrayParams;
        
    public:
            Form1(array<System::String ^> ^args) // void
            {
                arrayParams =args;
                InitializeComponent();
                //
                //TODO: agregar código de constructor aquí
                //
            }

     

    luego ya puedes usar dentro de la forma al objeto arrayParams

     

    ahh e incluye esto:

     

    using namespace System;

     

    y quita esto porque tu aplicacion no es de consola.:

    #include <stdio.h>

     

     

    lunes, 28 de enero de 2008 20:52
    Moderador
  • Ahora me da este error:
    Code Snippet

    Error    1    error C3149: 'cli::array<Type>' : no utilice este tipo aquí sin '^' de nivel superior    d:\documents and settings\admin\mis documentos\visual studio 2005\projects\aprendiendo\aprendiendo\Form1.h    24   


    en la línea que he copiado:
    Code Snippet

    private :

            array<System::String ^> arrayParams;



    Gracias por la paciencia que estais teniendo
    martes, 29 de enero de 2008 15:31
  • Creo que debería ser

    Code Snippet

    private :

            array<System::String ^> ^arrayParams;

    martes, 29 de enero de 2008 15:37
  • Muchisimas gracias. Ya funciona perfectamente.

    Una ultima pregunta en este tema.

    Como es c++ con .net las futuras dudas ¿las hago en este apartado? o en el de Desarrollo .NET General

    Muchas gracias.
    martes, 29 de enero de 2008 16:42