none
Implementacion: Problemas y dudas RRS feed

  • Pregunta

  • Hola de nuevo,

    He hecho ya mis primeros mini-programas en Visual C++, son algunos de consola y otros usando windows forms. En ambos tengo el mismo problema: no puedo implementar los programas, hacer un instalador de ellos. He estado mirando la ayuda pero me ha dejado mas confuso de lo que estaba. Puse el modo "Release" y se me crea un ejecutable en la carpeta Release de cada proyecto, pero si me llevo ese ejecutable a otro PC no me funciona.

    Estoy usando Visual C++ 2008 Express, varias preguntas:
    1. ¿Necesito la version Profesional para implementar?¿Como puedo hacerlo sino?
    2. ¿Pueden ser mis programas portables para OSX o Linux?
    3. ¿Hay alguna forma de que se "metan" los windows forms en la implementacion para que quien ejecute el programa no necesite instalar los FrameWork 3.5?
    sábado, 29 de agosto de 2009 15:45

Respuestas

  • Hola,

    cuando tú creas un programa, normalmente comienzas a trabajar utilizando elementos que tú no has creado (como printf o Windows::Forms::Form). Estos elementos ya se encuentran contenidos en algún archivo binario, al cuál llamamos librería, y el cuál necesitas para que tu programa corra. A esto le llamamos una dependencia. 

    Cuando trabajas con C++, por lo general tendrás al menos una dependencia: la librería estándar de C (MSVCR90.dll), que es la de las funciones y objetos comunes a C y C++. Además, también necesitas por lo menos la librería kernel32.dll, para cualquier programa Windows, y en muchas ocasiones también dependes de user32.dll. Y si utilizas alguna librería como MFC, pues enlazas con su correspondiente librería (MFC90U.dll). 

    En el caso de que trabajes con C++/CLI (por ejemplo, para utilizar Windows Forms), además de las dependencias mencionadas, necesitas instalar el .NET Framework, al menos en su versión 2.0, aunque depende mucho de qué utilices (para VC++/CLI 2008, lo normal es .NET Framework 3.5, me parece). 

    Así pues, necesitas asegurarte de que las dependencias que tiene tu programa se encuentren en la máquina donde las quieres ejecutar. Por ejemplo, que MSVCR90.dll y MFC90U.dll estén (si trabajas con ellas). En el caso de kernel32, user32 y gdi32, pues no lo necesitas ya que cualquier versión de Windows incluye dichas dependencias. 

    Es por eso que no funciona tu programa. 

    Visual C++, en sus ediciones estándar y profesional, viene con una herramienta que se llama Dependency Walker, que te ayuda a ver cuáles son las dependencias que tiene tu programa, para que sepas qué librerías distribuir. Esa herramienta no viene con la versión express, pero te la puedes bajar de aquí: 


    Si utilizas C++/CLI, baja el redistribuible del .NET Framework que estés utilizando. 

    Suerte y saludos. 
    • Marcado como respuesta LiquidProj3ct miércoles, 2 de septiembre de 2009 5:27
    lunes, 31 de agosto de 2009 21:08

Todas las respuestas

  • Hola,

    cuando tú creas un programa, normalmente comienzas a trabajar utilizando elementos que tú no has creado (como printf o Windows::Forms::Form). Estos elementos ya se encuentran contenidos en algún archivo binario, al cuál llamamos librería, y el cuál necesitas para que tu programa corra. A esto le llamamos una dependencia. 

    Cuando trabajas con C++, por lo general tendrás al menos una dependencia: la librería estándar de C (MSVCR90.dll), que es la de las funciones y objetos comunes a C y C++. Además, también necesitas por lo menos la librería kernel32.dll, para cualquier programa Windows, y en muchas ocasiones también dependes de user32.dll. Y si utilizas alguna librería como MFC, pues enlazas con su correspondiente librería (MFC90U.dll). 

    En el caso de que trabajes con C++/CLI (por ejemplo, para utilizar Windows Forms), además de las dependencias mencionadas, necesitas instalar el .NET Framework, al menos en su versión 2.0, aunque depende mucho de qué utilices (para VC++/CLI 2008, lo normal es .NET Framework 3.5, me parece). 

    Así pues, necesitas asegurarte de que las dependencias que tiene tu programa se encuentren en la máquina donde las quieres ejecutar. Por ejemplo, que MSVCR90.dll y MFC90U.dll estén (si trabajas con ellas). En el caso de kernel32, user32 y gdi32, pues no lo necesitas ya que cualquier versión de Windows incluye dichas dependencias. 

    Es por eso que no funciona tu programa. 

    Visual C++, en sus ediciones estándar y profesional, viene con una herramienta que se llama Dependency Walker, que te ayuda a ver cuáles son las dependencias que tiene tu programa, para que sepas qué librerías distribuir. Esa herramienta no viene con la versión express, pero te la puedes bajar de aquí: 


    Si utilizas C++/CLI, baja el redistribuible del .NET Framework que estés utilizando. 

    Suerte y saludos. 
    • Marcado como respuesta LiquidProj3ct miércoles, 2 de septiembre de 2009 5:27
    lunes, 31 de agosto de 2009 21:08
  • Muchisimas gracias!

    Me ha sido muy util!
    miércoles, 2 de septiembre de 2009 5:26