Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Unit común en proyecto con BPL's dinámicas. (https://www.clubdelphi.com/foros/showthread.php?t=70920)

vinguel 19-11-2010 13:17:53

Unit común en proyecto con BPL's dinámicas.
 
Buenas a todos.

Estoy haciendo un proyecto con BPL's dinamicas, hay un Main que tiene el menu que se crea leyendo una tabla de Oracle y luego llama a distintas BPL's que se crean de forma dinámica.
La idea es que una vez este bien montado el Main, creará el menú y llamara a los distintos formularios de forma totalmente dinamica.
El problema con el que me encuentro es que si uso una unit, en la que tengo variables globales y funciones comunes, en dos BPL's y las cargo, la segunda no me deja hacer el Load.
He intentado poner esa unit en una bpl dinamica a parte y hacer el load en el onshow del main, pero cuand uso las variables o las funciones en las distintas bpl's, como no ven esa unit, da error de compilacion.
Que rollo jejeje.

Muchas gracias.

Neftali [Germán.Estévez] 19-11-2010 16:11:39

Cita:

Empezado por vinguel (Mensaje 382757)
Estoy haciendo un proyecto con BPL's dinamicas,

La idea es que una vez este bien montado el Main, creará el menú y llamara a los distintos formularios de forma totalmente dinamica.

El problema con el que me encuentro es que si uso una unit, en la que tengo variables globales y funciones comunes, en dos BPL's y las cargo, la segunda no me deja hacer el Load.

He intentado poner esa unit en una bpl dinamica a parte y hacer el load en el onshow del main, pero cuand uso las variables o las funciones en las distintas bpl's, como no ven esa unit, da error de compilacion.

Hola Vinguel.

Creo que se soluciona colocando las cosas comunes en una BPL independiente (la llamaremos BPL BASE).

Supongamos que tienes 2 BPL's dinámicas BPL_A y BPL_B.
En mi caso lo que hago es que, como te he comentado, las cosas comunes están definidas en la BPB BASE. Tanto BPL_A como BPL_B están linkadas de forma estática a BPL BASE, de forma que usas las units de BPL BASE es los USES de BPL_A o BPL_B.

Cuando cargas de foma dinámica BPL_A o BPL_B, automáticamente se carga BPL BASE (sin hacer nada especial), pues está "linkada" de forma estática. Si ya has cargado BPL_A (esta a su vez habrá cargado BPL BASE), cuando cargas BPL_B ya no se carga, pues ya está en memoria.

Otra opción de carga es que el programa principal (el EXE) carge BPL BASE (de forma dinámica o estática), de esta forma cuando se cargan las otras BPL's de forma dinámica (BPL_A y BPL_B) encuentran que BPL BASE ya está cargada y no tendrán problemas para acceder a ella.

Ya se que es un poco "lioso" y espero no haerte dejado peor de lo que estabas, pero si estás trabajando con BPL's creo que me entenderás. Si no te aclaras dímelo e intento generar un pequeño ejemplillo...

Un saludo.

ContraVeneno 19-11-2010 16:33:53

Cita:

Empezado por Neftali (Mensaje 382762)
Otra opción de carga es que el programa principal (el EXE) carge BPL BASE (de forma dinámica o estática), de esta forma cuando se cargan las otras BPL's de forma dinámica (BPL_A y BPL_B) encuentran que BPL BASE ya está cargada y no tendrán problemas para acceder a ella.


esta es la misma forma que yo utilizo y me parece la más adecuada. De hecho, utilizo un poco de las dos. Tengo el BPL base enlazado de manera estática a cada BPL y con eso puedo utilizar todo lo que contenga en tiempo de diseño. Aquí incluyo funciones comunes, imágenes de botones, perfil de usuario y algunas otras cosas. Y el bpl base lo cargo cuando se crea el .exe.

Cierto que podría ser un pelín complicado al principio, pero una vez que has tenido éxito con tu primer BPL, lo demás ya es pan comido.

vinguel 19-11-2010 16:59:17

Muchísimas gracias a los dos,

Es cierto que es un poco lioso :rolleyes:, pero la forma de hacerlo esta clara. Supongo que es cuestión de acostumbrarse a incluir de forma estática esa BPL BASE en cada BPL dinámica.

Un saludo y hasta otra.


La franja horaria es GMT +2. Ahora son las 04:47:52.

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