Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cargar funcionalidad/modulo externo a programa (https://www.clubdelphi.com/foros/showthread.php?t=64911)

Bauhaus1975 10-11-2009 12:17:28

Cargar funcionalidad/modulo externo a programa
 
Buenas de nuevo!

A vueltas con mi proyecto de fin de carrera, llevo con él más de tres años, pero por motivos de trabajo se le echa poco tiempo. Y el tutor que nunca tiene suficiente me pide una nueva modificación que no sé bien como resolver:

El programa tiene diferentes algoritmos para calcular unas probabilidades. Hay un formulario donde se elije el que quieres usar y te da el resultado. Hasta aquí todo OK. Pero resulta que ahora se desea 'escalable', es decir que se puedan añadir nuevos métodos de forma externa (añadidos a los internos o nativos), para así poder añadir métodos en el futuro y comparar resultados.

¿Cómo puede hacerse esto?
¿Compilar cada nuevo método como una dll a parte y en el programa, en una hipótetica opción de 'métodos' añadirlos (las dlls) y que estén disponibles dentro del programa para su seleccion?
Disculpad si he dicho una barbaridad, pero es que nunca he hecho nada parecido y no tengo claro como atacar este tema.

Un saludo y gracias por vuestra ayuda.

Neftali [Germán.Estévez] 10-11-2009 13:28:42

Ninguna barbaridad. Yo creo que ese que comentas es el buen camino. Puedes realizar "Addins", que pueden ser BPL's o DLL's que se carguen dinámicamente.
Lo lógico sería que al iniciar la aplicación, por ejemplo, se revisara un directorio de Addins y cargara todos los ficheros DLL o BPL que encuentre ahí.

Esos ficheros tendrán que tener una estructura determinada para que el programa pueda reconocerlos.

Dentro de ellos tendrás que programar los nuevos "métodos".

En los foros hemos hablado otras veces sobre packages y sobre DLL's.
También puedes revisar aquí (mirror temporal de mi página) donde puedes encontrar un ejemplo sencillo de cómo programar PlugIns utilizando Packages de Delphi "Sistema de Plug-ins utilizando packages dinámicos" o desde aquí donde está el artículo completo en PDF/ODT y el código de ejemplo.

Bauhaus1975 12-11-2009 09:56:03

Hola Neftali, muchas gracias por tu ayuda y el tiempo que dedicas a que gente como yo pueda seguir aprendiendo.

He estado estudiando la documentación que has puesto en tu blog sobre el tema y ahora te comento dudas y cuestiones:

En mi caso, el plugin creo que debería ser una clase 'Metodo_Calculo', probablemente con un sólo método. La principal duda que tengo es que NO es formulario. Sólo cálculo, no sé si es problema.

Luego, por otra parte he visto que hay como dos versiones del proyecto que documentas un 'Delphi_Plugins_Con_Packages_Dinamicos.zip' y otro 'Prototipo1.zip', creo que el primero es más nuevo, pero el segundo es al que parece que hace referencia el documento que escribiste.
No he conseguido que compile (uso BDS 2005 con update2) me da el error 'No se encuentra rtl60.bpl'.
Procedo abriendo el proyecto con el archivo dpr y activo lo de 'Build with runtime packages'.
Seguramente estaré haciendo algo mal?

Bueno si puedes, ya me comentas.
Gracias y un saludo.

Neftali [Germán.Estévez] 12-11-2009 10:38:02

Cita:

Empezado por Bauhaus1975 (Mensaje 346323)
He estado estudiando la documentación que has puesto en tu blog sobre el tema y ahora te comento dudas y cuestiones:

Dispara!! :D


Cita:

Empezado por Bauhaus1975 (Mensaje 346323)
En mi caso, el plugin creo que debería ser una clase 'Metodo_Calculo', probablemente con un sólo método. La principal duda que tengo es que NO es formulario. Sólo cálculo, no sé si es problema.

Ningun problema. En lugar de mostrar tu formulario ejecutas el método y listo.


Cita:

Empezado por Bauhaus1975 (Mensaje 346323)
Luego, por otra parte he visto que hay como dos versiones del proyecto que documentas un 'Delphi_Plugins_Con_Packages_Dinamicos.zip' y otro 'Prototipo1.zip', creo que el primero es más nuevo, pero el segundo es al que parece que hace referencia el documento que escribiste.
No he conseguido que compile (uso BDS 2005 con update2) me da el error 'No se encuentra rtl60.bpl'.
Procedo abriendo el proyecto con el archivo dpr y activo lo de 'Build with runtime packages'.
Seguramente estaré haciendo algo mal?

Hola. Acabo de subir el "Prototipo1" de nuevo; He corregido un ar de cosas, he añadido un package nuevo (plugIn) para probar y he subido en proyecto compilado también en D2009. Bájatelo y testealo.
En cuanto al error, en el proyecto asegúrate de que tienes marcada la opción "Build with runtime packages" y en las lista de packages que hay bajo la opción anterior elimina los que no tengan sentido (segun la versión que estás utilizando).

Un saludo.

Bauhaus1975 12-11-2009 11:00:14

Cita:

Empezado por Neftali (Mensaje 346325)
Hola. Acabo de subir el "Prototipo1" de nuevo; He corregido un ar de cosas, he añadido un package nuevo (plugIn) para probar y he subido en proyecto compilado también en D2009. Bájatelo y testealo.
En cuanto al error, en el proyecto asegúrate de que tienes marcada la opción "Build with runtime packages" y en las lista de packages que hay bajo la opción anterior elimina los que no tengan sentido (segun la versión que estás utilizando).
Un saludo.

Excelente. Ya lo he bajado y lo estoy probando.
Creo que no me entero de algo... abro el proyecto el 'PlugTest.bdsproj' y compila, pero no aparecen los plugins cargados. ¿Tengo que compilarlos a parte y ponerlos en el directorio '/Addin'?

Un saludo.

Neftali [Germán.Estévez] 12-11-2009 11:56:01

Si.
Compílalos y copialos en ese directorio. Si miras el código del EXE, por defecto los busca en .\Addin

Bauhaus1975 12-11-2009 12:23:44

Cita:

Empezado por Neftali (Mensaje 346333)
Si.
Compílalos y copialos en ese directorio. Si miras el código del EXE, por defecto los busca en .\Addin

Jo, perdona de nuevo. Por favor dime cual es el procedimiento para compilar... porque no soy capaz.
Estoy haciendo:

1. Abro el proyecto. 'Open Project' -> cargo 'PlugTest.bdsproj'
2. Cargo los plugins. 'Open / Delphi packages' y abro los tres 'PT_*.dpk'

Pero no puedo compilar: 'Cannot run project unless a host application is defined'... Lo mismo ocurre si abro cada package por separado

¿Cuál es la manera para hacerlo?
Gracias.

Neftali [Germán.Estévez] 12-11-2009 12:49:21

No te preocupes.
Hay un grupo de proyectos que ya tiene configurados el EXE y los packages; Abre el fichero PG.groupproj

En ese punto ya te aparece el EXE y los proyectos de los plugIns.



Compilalo todo (Project / Build All Projects)

Las BPLs de los plugIns, como ya te he dicho deben estar en una carpeta llamada Addin que esté creada en el mismo sitio donde está el EXE.

Bauhaus1975 12-11-2009 13:04:07

Ahora sí.
Muchas gracias y un saludo


La franja horaria es GMT +2. Ahora son las 05:49:30.

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