Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Desarrollo con futuro plugins (https://www.clubdelphi.com/foros/showthread.php?t=32171)

ANG4L 28-05-2006 21:57:47

Desarrollo con futuro plugins
 
Buenas gente !
Estoy desarrollando un programita, pero quisiera en un futuro poder agregarle plugins o addons.... no tengo idea ni por donde empezar !

Se requieren
IDEAS, OPINIONES, SUGERENCIAS, ANECTODAS, COMENTARIOS, etceteras, etceteras, etceteras :p


Se agradece :D

dec 28-05-2006 22:23:50

Hola,

Por mi parte te diría que echaras un vistazo a la Jedi Library. Incluye componentes que son capaces de manejar "plugins" y también para crearlos, propiamente. Lo que te digo es que al menos puedes ver cómo se implementa ahí el asunto, por si puedes sacar algunas ideas o, directamente, hacer uso de los mencionados componentes.

Neftali [Germán.Estévez] 29-05-2006 10:09:24

Otra opción es que revises documentaciónsobre packages dinámicos; Es una buena opción que trae delphi para generar un sistema de plug-ins.

dec 29-05-2006 12:20:25

Hola,

Así debe ser Neftalí. De hecho los componentes que digo de la Jedi Library permiten dos formas de trabajo: los Plugins se situarán en archivos "DLL", o también pueden situarse en "paquetes dinámicos" de Delphi.

Yo la verdad es que no estoy muy puesto en estas cosas. Sin embargo, he echado un vistazo al código de los componentes que menciono y creo que pueden resultar útiles cuando menos para coger alguna que otra idea. ;)

Neftali [Germán.Estévez] 29-05-2006 12:42:12

En general, para trabajar desde Delphi, creo que siempre es mejor trabajar con BPL's, ya que son más potentes que las DLL's; en realidad son como una extensión de éstas. Si se quiere un fichero que se pueda llamar desde otro tipo de aplicaciones, es ese caso se debe uno decantar por las DLL's, ya que las BPL's no podrán llamarse desde otro tipo de programa.

dec 29-05-2006 12:53:03

Hola,

Cita:

Empezado por Neftalí
Si se quiere un fichero que se pueda llamar desde otro tipo de aplicaciones, es ese caso se debe uno decantar por las DLL's (...)

También está el caso de que tu aplicación, escrita en Delphi, quiera admitir Plugins escritos en otros lenguajes de programación. Aquí también vendría bien utilizar "DLL", no porque estas fueran utilizadas por programas no escritos en Delphi (tu aplicación está escrita en Delphi), sino para que puedan llevarse a cabo Plugins con otros lenguajes de programación.

Un ejemplo de esto puede ser el programa Neobook, de NeoSoftware. El programa está escrito en C++, si no me equivoco, aunque se comentaba que pudiera estar escrito en Delphi. Bueno. Lo importante para lo que nos ocupa es que dicho programa proporciona un "SDK" y un "API" que es accesible desde varios lenguajes de programación: C++, Delphi, Visual Basic.

Lo que uno genera en definitiva cuando crea un Plugin para Neobook es una DLL, la cual se encarga de leer y hacer lo que tenga que hacer con ella el programa Neobook. A este le da igual si la DLL está escrita en Delphi, en C++ o en Visual Basic.

Neftali [Germán.Estévez] 29-05-2006 13:20:00

Cita:

Empezado por dec
El programa está escrito en C++, si no me equivoco, aunque se comentaba que pudiera estar escrito en Delphi.

Parece que no está escrito en Delphi. 1 y 2.

dec 29-05-2006 13:42:11

Hola,

Ciertamente Neftalí. Queda claro que está escrito con Microsoft Visual C++. En todo caso lo que quería yo decir sigue siendo válido: es un programa escrito en Microsoft Visual C++ que admite Plugins escritos en Visual C++, en Delphi, en Visual Basic y en Power Basic, si no me equivoco.

Si hubiera estado escrito en Delphi y hubiera querido cumplir ese mismo objetivo, tendría igualmente que haber utilizado archivos DLL, Plugins contenidos en DLL. Ahora bien, que con esto no estoy diciendo nada en contra de los "paquetes dinámicos" de Delphi, ni mucho menos. Entiéndase bien. :)

Neftali [Germán.Estévez] 29-05-2006 14:50:12

Cita:

Empezado por dec
Si hubiera estado escrito en Delphi y hubiera querido cumplir ese mismo objetivo, tendría igualmente que haber utilizado archivos DLL

Correcto; esa es la premisa, para seleccionar DLL o BPL.

Aprovechando éste hilo, y puesto que hace tiempo que lo tenía pendiente, he generado un ejemplo sencillo de cómo utilizar plug-ins desde Delphi (con BPL's) en éste caso, aunque es muy similar a cómo se haría utilizando DLL (LoadLibrary/LoadPackage y UnloadLibrary/UnloadPackage).
Espero ir ampliándolo; Pensad que sólo tiene lo más básico y si encuentro el tiempo necesario, iré ampliándolo, ya que tengo un artículo pendiente sobre éste tema.

En éste caso se trata de un ejecutable principal y dos plug-ins muy tontos;
* PlugTest
* Plug_v1
* Plug_v2

Si al arrancar el programa principal, los plug-ins se encuentran en el directorio destinado para ellos, se encuentran y se añaden a un menú de plug-ins.
En el momento de ejecutarlos se cargan en memoria, ejecutan su función y se descargan.
Hay unas mínimas premisas a cumplir:
* La aplicación principal debe compilar con packages dinámicos.
* Los plug-ins deben tener el nombre/Clase del form principal, iguales (FormMainPlug: TFormMainPlug).
* La estructura de la función Execute de los plugins debe ser como se muestra en éstos y estar definida en la parte published.

Por supuesto, el ejemplo está abierto a cualquiera que quiera modificarlo/mejorarlo/comentarlo/...

Un saludo.

dec 29-05-2006 14:57:25

Hola,

Cita:

Empezado por Neftalí
Correcto; esa es la premisa, para seleccionar DLL o BPL.

Bueno, tal vez sea una de ellas. Otra pudiera ser la que tú mismo has indicado:

Cita:

Empezado por Neftalí
En general, para trabajar desde Delphi, creo que siempre es mejor trabajar con BPL's, ya que son más potentes que las DLL's; en realidad son como una extensión de éstas.

Respecto del ejemplo que adjunas ya está aquí y le echaremos un vistazo, que seguro que resulta curioso. :)

seoane 29-05-2006 15:36:36

Aunque no tenga mucho que ver con el tema del hilo, solo decir que Neobook si que esta echo en delphi. El Timestamp de NBPlay5.exe, NeoBook.exe y NBDebug.dll se corresponde con la marca que utiliza el compilador de delphi, lo que pasa es que parece que estan comprimidos o protegidos por algun otro software que si que esta echo en Visual C++. El metodo del Timestamp es el mas fiable para identificar un ejecutable echo con delphi ya que la mayoria de compresores no modifican el Timestamp del ejecutable.

Neftali [Germán.Estévez] 29-05-2006 17:16:14

Cita:

Empezado por seoane
Lo que pasa es que parece que estan comprimidos o protegidos por algun otro software que si que esta echo en Visual C++.

Las DLL's están comprimidas con ASProtect/ASPack y el ejecutable con Armadillo; Normalmente cuando se detecta la versión del compresor/encriptador ya se tiene en cuenta éste detalle (me refiero a la versión de dicha herramienta).

seoane 29-05-2006 17:52:12

Cita:

Normalmente cuando se detecta la versión del compresor/encriptador ya se tiene en cuenta éste detalle (me refiero a la versión de dicha herramienta).
:D ¿Entonces esta echo en Delphi o no ...? En serio, si el programa esta protegido, es precisamente para que nadie peuda averiguar su codigo (o por lo menos eso se intenta :) ), por lo tanto analizando el ejecutable se puede saber con que programa esta protegido pero ya es mas complicado obtener informacion sobre el ejecutable original. A lo mejor estoy diciendo una tonteria .... no estoy seguro.

De todas formas, el que tenga la misma marca que pone el compilador de delphi en todos su ejecutables parece una prueba de peso. Ignoro si algun otro compilador utiliza la misma marca, pero ya seria mucha casualidad.

Al final estoy desviandome del tema original del hilo (los plugins) pido disculpas ;) por ello

Neftali [Germán.Estévez] 29-05-2006 18:16:57

Cita:

Empezado por seoane
...si el programa esta protegido, es precisamente para que nadie peuda averiguar su codigo

Correcto; Cierto que no se puede obtener el código original del programa, pero sí otras cosas, como estuvimos comentando hace un par de semanas aquí.

Cita:

Empezado por seoane
...(1)por lo tanto analizando el ejecutable se puede saber con que programa esta protegido (2)pero ya es mas complicado obtener informacion sobre el ejecutable original

Lo complicado o no del punto (2), sólo depende de si existe el programa adecuado para "deshacer" el paso (1). :D
De todas formas, tienes razón; No es este el tema original, y que conste que aunque yo he comentado que no está hecho en Delphi, tampoco pondría la mano en el fuego. No conocía la existencia de dicha marca y como tú dices parece bastante fiable.

ANG4L 29-05-2006 18:39:09

Excelentes las respuestas, gracias a todos.
Veo que el tema da para una laaarga charla.

Muy didactico ese mini tutorial + ejemplo !
Lo voy a estudiar, vemos que sale, y posteare algun el resultado.

Saludos Gente :D

Victor EHP 12-08-2006 04:12:39

Quisiera que este porgramita que tengo te ayude en algo
 
:confused: Para:ang4l

Amigo(a):Espero que podamos resolver nuestro problema y el programa que esta tratando de conformar te funcione,yo tengo un pequeño
trabajo diseñado para actualizar las llaves(key) de la visionPlus el programa
se llama Echostar Keys se bajo de la paginawww.efta.us ywww.z.tv.us.
Este programa se actualiza a traves de dos servidores nacionales e internet,pero yo no tengo acceso a ella por lo que tengo que acerlo por mi servidor.ahora no surte efecto parece que todas las llaves fueron cambiadas
y no se obtiene actualizacion alguna.escribeme y nos pondremos de acuerdo
para enviarte los datos dime a que direccion te lo envio y Listo .

Ojala esto te ayude en tu trabajo y asi podremos provar si funciona.
Saludos y espero respuesta.

victor EHP(melenat@infomed.sld.cu)

ANG4L 01-06-2007 19:39:45

Sr Neftali, tendra por ahi, a mano, el ejemplo que posteo aquella vez ?

jhonny 01-06-2007 19:45:11

Cita:

Empezado por ANG4L
Sr Neftali, tendra por ahi, a mano, el ejemplo que posteo aquella vez ?

Te refieres a este ejemplo?
http://www.clubdelphi.com/foros/show...29&postcount=2

Neftali [Germán.Estévez] 05-06-2007 13:34:58

Cita:

Empezado por ANG4L
¿tendra por ahi, a mano, el ejemplo que posteo aquella vez ?

No se de qué ejecutable estamos hablando. ¿Puedes especificar un poco más?


La franja horaria es GMT +2. Ahora son las 20:39:50.

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