Ver Mensaje Individual
  #11  
Antiguo 13-09-2019
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.289
Reputación: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Se me hace complicado con tantos datos y nada concreto hacerme una idea.
Si no te importa (y cogiendo un ejemplo de la primera referencia que has hecho) adjunto un proyecto sencillo sobre el que hacer las pruebas.

Se trata de un grupo de proyectos formado por:
(1) Un Package (restas) que contiene una unit con funciones (URestas) y un formulario (UMain).
(2) Una aplicación con 2 botones. Uno llama a la función contenida en (URestas) y otra abre el form contenido en (UMain)

Las formas de generar la aplicación serían:

OPCION 1: Un único EXE (sin packages)
Basta con que desde la aplicación principal estén accesibles todas las units y en la configuració marcar:
"Link with runtime packages" a FALSE



Y en el path de búsqueda he añadido el directorio donde están las units del package (Restas) para que las encuentre.





==> Esto genera un EXE de un poco más de 2MB. El compilador coge todas las units que necesita (que están en los USES) y las añade a la aplicación.

Si revisamos en EXE con un editor de recursos, podemos ver tanto el formulario de la aplicación como el formulario UMain están incluidos. Es correcto, porque queremos una aplicación (EXE) que lo contenga todo.






Si comprobamos la dependencias del EXE veremos que no necesita ninguna BPL, cosa que también es correcto.





OPCION 2: EXE + BPL (carga estática)


En este caso empezamos compilando el Package (Restas). He cambiado la configuración de este package para que el BPL y el DCP resultante vayan a parar al mismo sitio donde se genera el EXE (no es obligatorio, pero en este caso facilita las cosas).




==> Esto genera un fichero BPL de 38KB

Si revisamos el contenido vemos que contiene el formulario (UMain), como es lógico.




Ahora cambiamos la configuración de la aplicación (sólo necesitamos cambiar la configuración) para que compile con package.
Activamoes el flag "Link with runtime packages" a TRUE y añadimos el packages Restas.




Compilamos la aplicación.


NOTA IMPORTANTE: Al decirle que use el Packages Restas, como el programa sabe qué contiene ese package, lo que va a hacer es que cuando encuentre en un USES la unit URestas y el formulario UMain, NO LOS VA A AÑADIR AL EXE, porque sabe que en ejecución los va a encontrar dentro del package (Restas).

==> Vemos ahora que el EXE resultante ocupa 36KB (era lógico que ocupara mucho menos; Ahora no contiene ni lo del package Restas ni lo de la VCL).

Si revisamos el EXE vamos que ahora NO contiene el formulario UMain del package Restas (sólo tiene uno a diferencia de la generacion anterior).




Si miramos las dependencias del EXE ahora aparecen los packages que necesita para funcionar (Restas.bpl, rtl250.bpl, vcl250.bpl). estos package se DEBEN DISTRIBUIR con la aplicación de forma obligatoria para que funcione.




Si sigues los pasos, deberías poder generar la aplicación con los 2 escenarios.


Tus dudas están en el segundo caso, pero como has visto, a la hora de programar no hay que hacer NADA DIFERENTE. El código no cambia y lo único que hacemos es poner las cosas (formularios y Units) en lugares diferentes.


La aplicación principal en el trabajo del día a día debe tener acceso a todos los formularios y units (sean DCUs o PAS), pero cuando finalmente se compilan y se linkan los paquetes y la aplicación, Delphi conoce lo que hay en cada Package y NO LO AÑADE a la APP principal, sino que guarda una referencia de a qué BPL debe ir a buscarlo.
Archivos Adjuntos
Tipo de Archivo: zip Carga estatica Packages.zip (13,5 KB, 8 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita