![]() |
Modo Correcto de Cerrar .Dll
Hola a todos, y un gran saludo.
El tema que me ocupa hoy, es el siguiente. En días pasados, he estado trabajando en el desarrollo de una Dll (Se trata de un formulario en Delphi 7, con algunos controles WebBrowser, para ser compartido, con una aplicación hecha también en Delphi 7). De este modo, mi .Dll la he escrito sin inconveniente alguno. El llamado a la .dll desde el formulario principal, se hace perfectamente, pero he notado esto: 1) Si solo abro la aplicación principal, y trabajo con ella, y luego la cierro, sin haber llamado la Dll, todo va de maravilla. 2) Si abro la aplicación principal, y llamo la .Dll, esta carga, y puedo luego cerrarla, pero, a la hora de cerrar la aplicación principal, inicialmente genera un error en código exadecimal, para luego abrirse una ventana que genera un error 216 en tiempo de ejecución. Haciendo pruebas, descubri, que si en el evento "OnClose" del Form principal agregaba estas lineas: Código:
Application.Destroy; He leído que se trata en algunos casos de un virus, pero en mi caso, he probado en otra de mis máquinas, que recién acababa de formatear, para verificar que no se tratase de un virus. ¿Que puede ser? Mil gracias por la ayuda, y un gran abrazo Julián |
Bueno :rolleyes: pienso que esas lineas de codigo que mencionas son innecesaria.;).
Por otro lado mira este hilo.;). Saludos...:) |
Si la DLL usa cualquier parte de la VCL (Forms, reports, componentes, etc...) como parece ser que es tu caso, tanto la DLL como la aplicación que la llame tienen que estar enlazadas con la opción "Build with runtime packages". (Compiler | Options | packages | Checkear "Build with runtime packages")
De lo contrario, la aplicación y la DLL tendrán cada una su copia de la VCL, lo que suele dar estos problemas. Algunas variables globales como Application o Screen existen dos veces, etc... En la lista de packages debes tener todos los packages que van a usar la aplicación y la DLL. (De hecho, un runtime package no es más que una DLL con algunas funciones de registro propias de Delphi). Cordialmente, Gerard. |
hola,
te pongo un ejemplo resumido del fuente tal y como yo lo hago, mis primeras experiencias con Dlls me llevaron a averiguar que hay dos maneras de cargarlas, con la aplicación al iniciar o por requerimiento, yo lo hago de la segunda manera: (***** unit FUNCION CARGA DLLS, LA CARGA Y LIBERA DE MEMORIA ******)
(****** APLICACION PRINCIPAL *******)
(******** DLL ejecutada - source proyecto *****)
(** DLL ejecutada - fuente "DeclaracionesOpcionesExportadas" **)
Espero que te sea de utilidad Un saludo |
La franja horaria es GMT +2. Ahora son las 02:08:21. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi