Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-07-2010
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.286
Poder: 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
Con ese Edit estás obligando (o indicando) a que ese package realmente sea un package en Runtime; No se van añadir al programa principal.

Imagina la siguiente situación; En un mismo directorio tienes los ficheros del package (Restas.BPL) y del Ejecutable (EXE).
Borras todos los ficheros compilados (DCU, DCP, EXE, BPL) del directorio.





Eliminamos el package RESTAS.BPL, de la lista de "Runtime Packages" con lo que estamos diciendo que "no es un package de Runtime" o no le estamos diciendo expresamente que lo sea:



Si ahora compilamos nuestro ejecutable, como en ningun sitio le hemos indicado que ese RESTAS.BPL es un "Runtime Package", lo que delphi hace (ya que encuentra los fuentes) es añadirlas al ejecutable.
Para comprobarlo vemos que en disco sólo se genera el fichero del ejecutable y si lo revisamos con alguna herramienta para ver recursos, se puede ver que el formulario que estaba definido dentro del package (UMain.pas con la clase TFormMain) se ha añadido al ejecutable:



Se ha añadido al EXE porque en nungun sitio se le ha especificado que los elementos pertenecientes a ese package deben ser tratados como tales.

Volvemos a borrar TODOS los ficheros compilados y probamos la segunda opción; Añadir a la lista de "packagesa en runtime" nuestro package "RESTAS.BPL".



Al intentar compilar ahora el ejecutable, vemos que ahora no añade esos elementos al EXE, sino que COMPILA primero el package RESTA.BPL (sin haberselo dicho explícitamente -lo saca de esa lista-) y posteriormente compila el EXE. Si miramos ahora el EXE vemos que no incluye los formularios que están en el package:



Determina qué packages en runtime va a utilizar tu aplicación, por lo tanto obligas a que esos packages estén generados y disponibles (DCP) en el momento de compilar tu EXE. En ese momento comprueba que en esos packages esta lo que tú necesitas (Units añadidas al uses) y compila tu EXE.
Lo que no está en esos packages, al encontrarlo se incluye en tu EXE.
__________________
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
  #2  
Antiguo 16-07-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Neftali Ver Mensaje
Con ese Edit estás obligando (o indicando) a que ese package realmente sea un package en Runtime; No se van añadir al programa principal.
Algo así tenía idea. Pero, entonces, si de dicha lista quitamos vcl, en teoría, podríamos generar un ejecutable en el que sólo nuestros paquetes personales sean dinámicos, evitando así tener que redistribuir la vcl.

Lo curioso es que si quitas todos los paquetes de la lista, la opción "Build with runtime packages" se desmarca sola. No he probado si agregamos un paquete personal y quitamos la vcl si realmente sucede lo que digo.

// Saludos
Responder Con Cita
  #3  
Antiguo 16-07-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Thumbs up

Pues yo estaba casi nulo en éstos asuntos de "carga dinámica y estática de packages y dll", pero ahora con la super explicacion de Neftali pues ya le voy entendiendo a la cosa..
Muchas gracias Neftali por dar tanto de tu conocimiento..
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #4  
Antiguo 16-07-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Yo sólo conocía la parte de los bpl porque hace años nos encontramos que nuestro .exe era tan grande que los win98 y winMe no los podía ejecutar, así que lo compilamos con las bpl aparte y con el tamaño resultante del .exe ya sí que pudimos ejecutarlo en esos sistemas.
Sin embargo con winNT y 2000 sí que funcionaban con "todo dentro".
Responder Con Cita
  #5  
Antiguo 19-07-2010
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.286
Poder: 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
Cita:
Empezado por roman Ver Mensaje
Pero, entonces, si de dicha lista quitamos vcl, en teoría, podríamos generar un ejecutable en el que sólo nuestros paquetes personales sean dinámicos, evitando así tener que redistribuir la vcl.
En teoría sí, si eliminamos todos los DCPs y BPL's y tenemos disponible el código fuente, debería añadirlos.

Cita:
Empezado por roman Ver Mensaje
Lo curioso es que si quitas todos los paquetes de la lista, la opción "Build with runtime packages" se desmarca sola. No he probado si agregamos un paquete personal y quitamos la vcl si realmente sucede lo que digo.
Si dejas un sólo paquete lo mantiene, es al dejarlo vacío que lo desactiva.
__________________
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
  #6  
Antiguo 19-07-2010
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.286
Poder: 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
Lo prometido es deuda, así que he completado la entrada en mi blog, y allí mismo podéis encontrar el código de los ejemplos que os adjunto a este mensaje.
Archivos Adjuntos
Tipo de Archivo: zip ejemplos_dll_bpl.zip (28,9 KB, 64 visitas)
Tipo de Archivo: zip ejemplos_dll_bpl.rar.zip (27,1 KB, 28 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
  #7  
Antiguo 27-07-2010
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
...Al intentar compilar ahora el ejecutable, vemos que ahora no añade esos elementos al EXE, sino que COMPILA primero el package RESTA.BPL (sin haberselo dicho explícitamente -lo saca de esa lista-) y posteriormente compila el EXE....
Muy buen tema, Gracias Neftalí.

Solo aclarar, que se compilaría pimero el BPL, solo si este tiene seleccionada la opción de "reconstruir cuando sea necesario" ("Rebuild as needed"). Si se tiene la opción de "reconstrucción explícita" ("Explicit rebuild") el BPL no tendría porque compilarse cada vez que se compile el proyecto donde se le requiera.

Saludos.
__________________

Responder Con Cita
  #8  
Antiguo 27-07-2010
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.286
Poder: 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
Thumbs up

Cita:
Empezado por ContraVeneno Ver Mensaje
Solo aclarar, que se compilaría pimero el BPL, solo si este tiene seleccionada la opción de "reconstruir cuando sea necesario" ("Rebuild as needed"). Si se tiene la opción de "reconstrucción explícita" ("Explicit rebuild") el BPL no tendría porque compilarse cada vez que se compile el proyecto donde se le requiera.
Correctísima aclaración ContraVeneno.
En mi caso estaba dando por supuesto que el package no existía, de ahí que asumía siempre se generara.
__________________
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
  #9  
Antiguo 29-07-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Neftalí:

Muy esclarecedor el post.

Gracias por compartirlo.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 23-05-2011
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
Que interesante esto.. me apundo para tenerlo a manos despues


Salu2
__________________
BlueSteel
Responder Con Cita
  #11  
Antiguo 29-11-2013
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Poder: 20
ElDuc Va por buen camino
Hola, en realidad no sé si alguien verá este post, ya que el hilo se creó hace 9 años.

Bueno por si lo veis, comentaros que ahora yo estoy con este lio de los paquetes y que me estoy volviendo loco, trabajo con D2010, por si sirve de algo.

La explicación de Neftali está meridianamente clara y creo que la comprendo bien, pero cuando lo hago me sales esto:
" ..\Prueba1.exe no es una aplicación Win32 válida"

Alguien me puede ayudar?, muchas gracias.
Responder Con Cita
  #12  
Antiguo 29-11-2013
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Poder: 20
ElDuc Va por buen camino
Perdonad, he pensado que si ponía toda la información sería más fácil que alguien me ayudara.

Paso 1:
Realizo un proyecto normal, Aquí pongo el project manager para que podáis ver el contenido del proyecto:


El código de las 2 unidades es el siguiente:
Código Delphi [-]
Unit uForm1;

Interface

Uses
    uForm2,
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls;

Type
    TForm1= Class(TForm)
        Button1: TButton;
    procedure Button1Click(Sender: TObject);
    Private
        { Private declarations }
    Public
        { Public declarations }
    End;

Var
    Form1: TForm1;

Implementation

{$R *.dfm}

Var
    Form2:TForm2;

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2:=TForm2.Create(Application);
Form2.ShowModal;
Form2.Free;
end;

End.

Código Delphi [-]
unit uForm2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm2 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

end.

Selecciono en las opciones para que el Form2 no se cree automáticamente


Compilo y ejecuto y todo va bien, me aparece


Y cuando pulso el botón se abre el formulario 2


Guardo y cierro todo y creo el paquete


Compilo (build) y lo guardo, ahora vuelvo a abrir el proyecto original y cambio para que utilice el paquete


Guardo, compilo y ejecuto y me sale esto


No sé como solucionarlo, Help me!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Carga dinamica de una dll y Access violation zurech OOP 3 21-02-2011 12:33:14
carga dinamica de un dllform pabloloustau Varios 6 11-03-2010 09:47:52
Duda con Build with runtime packages dtomeysoto Varios 5 18-12-2009 21:05:41
carga dinámica de una libreria en linux Robert01 Lazarus, FreePascal, Kylix, etc. 2 06-10-2007 19:43:15
Carga el applet maribajar JAVA 2 22-06-2007 11:15:15


La franja horaria es GMT +2. Ahora son las 18:13:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi