Ver Mensaje Individual
  #7  
Antiguo 25-08-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por jmariano
es necesario especificar en la lista "Runtime packages" del archivo de proyecto aquellos paquetes que se desean usar de forma dinámica
Vamos a aclarar una cosa:

El que un paquete esté dentro de esta lista no significa que el paquete sea dinámico.

El colocar un paquete en esta lista significa simplemente que el paquete residirá fuera del ejecutable (razón por la cual el tamaño del ejecutable decrece).

Sin embargo, cualquier referencia al paquete dentro de la aplicación (no me estoy metiendo aquí con otros paquetes y su lista de paquetes requeridos), hará que el enlace sea estático, aún estando fuera del ejecutable.

Si se quita el archivo bpl la aplicación marcará un error al iniciar ya que, al ser un enlace estático, el ejecutable busca este bpl desde el inicio.

Es similar a las bibliotecas dll (los bpl son a fin de cuentas un tipo especial de dlls).

Si existe una sóla referencia a la biblioteca dentro de la aplicación, el ejecutable la buscará desde el inicio (enlace estático) por lo que fallará si no está presente el dll.

Si se desea un enlace dinámico a la biblioteca entonces debe omitirse cualquier referencia a ella y cargarla con LoadLibrary.

La conclusión entonces es: si el paquete está en la lista de run time packages y por otro lado se usa LoadPackage para cargarlo, entonces se habrá cargado dos veces el paquete; una vez al inicio de la aplicación y otra al usar LoadPackage.

En resumen, la calidad de estático o dinámico se refiere a la forma en que se enlaza el paquete, no a si éste reside o no dentro del ejecutable.

Puede leerse el conocido artículo Dynamic packages in Delphi de Vino Rodrigues donde específicamente señala los siguientes puntos para enlazar dinámicamente un paquete:

Cita:
...
4.Remove "Package1" from the "Runtime packages" edit-box section and OK the options.
5. On Delphi's toolbar, click on the "Remove file from project" button.
6. Select "Unit2 | Form2" from the list and then "OK."
7. Now go to the "Unit1.pas" source and remove Unit2 from its uses clause. (These steps are required to remove any link to Unit2 and the package we wish to load dynamically.)
// Saludos

Última edición por roman fecha: 25-08-2005 a las 14:40:48.
Responder Con Cita