Ir al contenido


Foto

[RESUELTO] ¿Como modularizar un Ejecutable?


  • Por favor identifícate para responder
10 respuestas en este tema

#1 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 03 febrero 2010 - 11:08

Saludos.

Estoy tratando de modularizar mi aplicación lógicamente con la utilización de los BPL.

Es la primera vez que estoy trabajando en esta opción, porque quiero disminuir el tamaño de mi ejecutable.

Pero la forma en que quiero "dividirlo" es que el ejecutable dependa de los BPL, me explico, vi que se puede trabajar de manera desconectada con los BPL, teniendo que cargar los BPL con unas sentencias dentro de las unidades al momento de tener que acceder a cualquier recurso que este dentro del mismo, esta NO es la manera en que quiero trabajar.  Sino que el BPL y el EXE convivan sin necesidad de tener que cargar en memoria vía código el BPL.

Los pasos que doy son los siguientes:

1.- Creo un paquete nuevo y le asigno que es RunTime, agrego un formulario vació.

2.- Cierro el proyecto anterior y creo un proyecto nuevo (Application) y agrego un formulario vació.

3.- En Project -> Options -> Packages le marco la opción Build with runtime packages.

4.- Le dejo solamente el package VCL.

5.- Compilo con la opción Build All Projects.  Hasta aquí sin problema alguno.

6.- Vuelvo a Project -> Options -> Packages y le añado entro los packages el paquete creado en el primer paso.

7.- Compilo con la opción Build All Projects.  Y aquí es donde le da la garrotera a mi Delphi 2007 que se cuelga, utiliza más de 150 MB de memoria y un 50% del procesador, hasta que no lo "tumbo" por el Task Manager no termina.

¿Me pueden indicar que debo de hacer y que estoy haciendo mal?

Gracias anticipadas.
  • 0

#2 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 03 febrero 2010 - 11:38

Dos preguntas, para ir descartando las posibilidades...

1. En la opción Build with runtime packages tienes además de VCL, el nombre de tu BPL del package creado al principio ?
2. En tu project manager ves tanto tu .exe como tu paquete creado ?

Saludox ! :D

  • 0

#3 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 03 febrero 2010 - 11:51

Saludos.

Me auto respondo, con solo marcar la opción en el package Explicit Rebuild  :^) y claro esta también marcada la opción RunTime Only (previamente la tenía marcada).

Con los pasos anteriores citados funciona a la perfección.

Fenareth, para la primera pregunta, te respondo, una vez creado el package "personal" y después el ejecutable, pues en la opción del ejecutable si agregue el package.

Para tu segunda pregunta, una vez hecho lo anterior en el Project Manager, que por defecto indica un Project Group, le agregue el proyecto del BPL y por ende veía ambos.

Todo esta bien.
  • 0

#4 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 03 febrero 2010 - 06:49

Este tema merece un mini-como..  con imagenes del procedimiento realizado..


SALUDOS..  muy buen aporte...

  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 03 febrero 2010 - 07:49

Este tema merece un mini-como..  con imagenes del procedimiento realizado..


SALUDOS..  muy buen aporte...


Concuerdo con pcicom, está muy interesante el uso de los BPL (yo los desconozco).

Saludos.
  • 0

#6 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 03 febrero 2010 - 09:00


Este tema merece un mini-como..  con imagenes del procedimiento realizado..


SALUDOS..  muy buen aporte...


Concuerdo con pcicom, está muy interesante el uso de los BPL (yo los desconozco).

Saludos.


Saludos.

Según tengo entendido hay una persona (Fenareth) que iba a realizar un tutorial sobre el tema.

Pues poseo de conocimientos básicos y/o simples en estos asuntos, de hecho implementare esta técnica en un par semanas con suerte y probablemente este por acá preguntando.  Pero creo poder ayudar si alguien decide incursionar en esta metodología.
  • 0

#7 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 04 febrero 2010 - 04:32

@Rolphy, ¿ de verdad te vale la pena ?, yo veo el hecho de compilar toda la aplicación y componentes en un solo ejecutable como una de las mejores cosas de Delphi. Es una maravilla el solo tener que distribuir tu ejecutable (sobre todo cuando antes has programado en cosas como Visual Basic, donde tenías que distribuir también centenares de librerías).

Tener que preocuparte de que tu cliente tenga al día todas las .bpl me parece un paso atrás.

Mis aplicación más grande ocupa 15Mb (y tiene centenares de formularios, pero el uso masivo de la herencia visual permite que el tamaño no se dispare), eso comprimido con Winrar, por ejemplo, pasa a ocupar 3Mb.

Con estos tamaños, prefiero que todo siga estando en el ejecutable y facilitar las instalaciones y actualizaciones (además, realmente nunca paso el ejecutable a los clientes para que se actualicen, sino que preparo un pequeño instalador, hecho con Inno Setup, para que actualice el ejecutable y haga cuatro comprobaciones en la base de datos. Es increíble el ratio de compresión que consiguen las Inno Setups, comprime bastante más que el Winrar, por lo que el instalador de Actualización siempre me queda bastante pequeño).

En tu caso, ¿ que tamaños tiene el ejecutable y hacía que tamaños estás buscando que se quede ?.

Saludos.
  • 0

#8 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 04 febrero 2010 - 08:56

Saludos.

Gracias Marc por interesarte en el tema.

Pues te cuento, realizando mi FrameWork que no es más que unas cuantas unidades y formularios, claro esta usando herencia, sumándole a esto el uso de los DevExpress y faltandome unas que otras plantillas (formularios hijos) mi ejecutable tiene el tamaño de 14 MB solo de FrameWork.

Imagínate cuando lo tenga en producción, ahora bien, utilizo también su Suite de Temas (Skins) la misma consume un monto de memoria cuando cargas el FrameWork al inicio ocupa de memoria alrededor de 30 - 40 MB, que es bastante, esto sin realizar ningún tipo de operación o proceso o mas bien sin utilizar un mantenimiento común.

Utilizando BPL puedo distribuir esos paquetes y mi ejecutable bajaría considerablemente de tamaño e incluso el consumo de memoria.  Además de que si usas BPLs, puedes realizar un cambio sin tener que actualizar tu ejecutable, claro debes de actualizar dicho BPL.

Te presento este caso, no es el mío pero es bastante común, supón la parte del área de los reportes de cualquier aplicación de antemano sabes lo quisquillosos que son los clientes con esto, a cada rato estas cambiando un Label de posición, color, Caption y cualquier otra tontería; en tu caso tendrías que hacer un instalador para reemplazar un ejecutable que solo tiene un cambio en un Label de un reporte, suena aterrador, cierto?? viví esa odisea donde labore hace tiempo.

Si tienes modularizada tu aplicación simplemente mandas tu BPL y listo.  Otra ventaja que da, es que al momento de realizar pruebas solo realizas pruebas sobre este modulo, osea al departamento de pruebas solo envías este BPL e incluso el departamento de desarrollo solo trabaja en esto; te hago el comentario porque viví en carne propia este tipo de situaciones donde se envía ejecutables desactualizados por módulos al área de prueba  y en el peor de los casos al cliente; esto ocurría mientras nos adaptábamos a las nuevas reglas de desarrollo e implementación.

Como ves, en situaciones es ganancia en otra es perdida, todo va a depender de lo que tengas a mano en ese momento.
  • 0

#9 pcicom

pcicom

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 267 mensajes
  • LocationMéxico

Escrito 04 febrero 2010 - 10:50

Saludos ROLPHY...  has intentado SACAR tus reportes del mismo EXECUTABLE..  con esto disminuirias el tamaño de tu EXE y ademas evitarias ACTUALIZAR tu EXE cuando modificaques el REPORTE..,  de esta menera solo reenviarias el REPORTE..

En lo particular, yo los reportes los tengo independientes al EXE, y tengo una BASE donde grabo los reportes, con un indicador de fecha de actualizacion, de esta manera al actualizar el reporte las estaciones de trabajo descargan desde la misma base de datos el reporte, que por lo general ocupan en promedio 10 a 15 k...

Para la actualizacion del EXE mis sistemas EJECUTAN un LANZADOR que siempre checa la version del EXE si existe alguna VERSION nueva la descargan de WEB/FTP/LAN, e inmediatamente ejecutan el programa descargado que seria el nuevo...

Por lo general mis EXES no sobrepasan los 6MB y ademas los comprimo con UPX, quedando mi EXE transportable en un tamaño promedio de 2.3MB..


PERO INDEPENDIENTEMENTE DE ESTA METODOLOGIA..  suena MUY INTERESANTE el poder hacer lo que mencionas con los BPL...    siempre habra un momento en que pueda ser una exelente OPCION...

SALUDOS..




  • 0

#10 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 04 febrero 2010 - 11:01

Saludos.

Pcicom eso del reporte lo puse como mero ejemplo no es que sea mi caso en particular.

Este hilo lo cree justamente para resolver una situación con Report Builder que da la posibilidad de guardar los reportes en la BD.

Gracias por tu interés.
  • 0

#11 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 04 febrero 2010 - 12:50

Gracias por la explicación @Rophy, 14Mb solo con el framework es mucho, ya veo porqué necesitas modularizar tu aplicación.

Ya nos dirás que tal te funciona, siento curiosidad (aunque con el tamaño pequeño de mis ejecutables, no creo que vaya a usar módulos).

NOTA: Yo también guardo los reports fuera del programa ya que como dices, los clientes son muy quisquillosos, y todos quieren adaptar las impresiones para el cliente final (tiquets, resguardos, etc. ...). No me imagino como sería el tener hacer una compilación especial para cada cliente (y mantenerlo cada vez que añades funcionalidad al programa). Menuda pesadilla debe ser, me da escalofríos con solo imaginarlo. :)
  • 0




IP.Board spam blocked by CleanTalk.