PDA

Ver la Versión Completa : Problema con ventanas desde dll


AdrianD
29-05-2020, 15:09:04
Hola buen día gente. Le comento un problema que tengo en delphi 10.3 a ver si alguien me hecha alguna luz sobre el tema.
Tengo un sistema de gestión que estoy reescribiendo en delphi 10.3 para windows, los distintos módulos del sistema están en dlls, o sea hay una dll para los productos, una para ventas, una para proveedores, etc.
El problema que tengo es que si desde una form en alguna de esas dlls muestro alguna otra form esperando un resultado o tan simplemente un messagebox con algún mensaje, al cerrarse alguna de estas últimas el control no vuelve a la form que la lanzó y tengo que hacer click sobre la form que la lanzó para que esta retome el control.
A alguien le pasó algo así?

Desde ya muchas gracias

Neftali [Germán.Estévez]
02-06-2020, 13:38:38
Creo que hasta cierto punto es lógico, porque el código de tu DLL no deja de ser como una aplicación independiente.
No explicas cómo abres los formularios de la DLL, puedo imaginar que la cargas con LoadLibrary.
Otra duda es porqué no utilizar BPL's.
En el caso de DLL's creo que puedes realizar la sincronización utilizandodo los Handles de tu aplicación en delphi (aplicación, form principal,...)

AdrianD
02-06-2020, 20:52:50
Neftali, muchas gracias por responder. Si exactamente lo hago con loadlibrary, esto no me pasaba con delphi 6, de todas formas no tengo problemas en cambiar. Nunca lo había hecho con bpl's pero puedo cambiarlo
El código que tengo en la dll es este

Application.Handle := AppHandle;
dmArticulos := TdmArticulos.Create(Application);
dmArticulos.conArticulos.SharedCliHandle := DBHandle;
dmArticulos.conArticulos.Open;
frmArticulos := TfrmArticulos.Create(Application);
frmArticulos.Show;

De nuevo muchas gracias

Neftali [Germán.Estévez]
03-06-2020, 09:34:02
Si ese código o formulario sólo lo vas a utilizar en una aplicación hecha en delphi, yo te recomendaría que utilizaras packages (BPLs).
Piensa (no sé quien dijo esto) que "una BPL es como una DLL con esteroides". :D
Si te decides a usar BPL's, luego puedes decidir si las linkas/cargas de forma estática o dinámica.
A malas siempre puedes usarla como una DLL, incluso la puedes seguir cargando con LoadLibrary (aunque pierdes funcionalidad).

Si por el contrario ese código o formularios tienes pensado o hay la posibilidad de que los utilices en otras aplicaciones (otros lenguajes) no te queda otra que seguir utilizando DLL's.

AdrianD
03-06-2020, 16:59:39
No la verdad que todo se usa dese aplicaciones que desarrollo en Delphi. Habrá en el foro algún ejemplo de como usar de este modo las BPL's? así busco

De nuevo muchas gracias

Neftali [Germán.Estévez]
04-06-2020, 09:48:29
Puedes hacer pruebas con packages.
Aquí tienes un artículos que explica (o lo intenta) las diferentes opciones entre DLL's y BPL's. Y entre carga estática y dinámica.
También tienes ejemplos sencilos.

https://neftali.clubdelphi.com/dlls-bpls-carga-dinamicaestatica-y-packages-en-runtime/

Como dije al final una BPL y similar a una DLL, pero si vas a utilizarla desde delphi tiene ventajas, ya que puedes utilizar RTTI
Aunque ya es un poco antiguo, aquí tienes otro artículo que habla de cómo trabajar con BPLs de forma dinámica, implementando un sistema de Plugins (carga dinámica de packages).

https://neftali.clubdelphi.com/sistema-de-plugins-en-delphi-parte-2/

AdrianD
04-06-2020, 15:09:56
Muchas gracias