![]() |
DLL' s con formularios
Hola Amigos... Les contare que trabajo en un empresa en donde se desarrolla con distintos productos , VB, Java, Delphi, etc... nuestra area tiene una serie de funciones y procedimiento que han sido desarrollado en delphi, decidimos entonces exportar todas nuestras funciones hacia una DLL, al inicio problemas con los tipos String, pero todo se soluciono rapido, magnifico¡¡, ahora los otros desarrolladores de otros lenguajes pueden usar nuestras funciones.
hasta alli bien , pero tambien, tenemos modulos hechos en delphi que se conectan con bases de datos, realizan operaciones con data , etc, etc, etc, los mismos programadores en VB y Visual Fox nos pidieron los mismos modulos pero en DLL. Entonces se nos ocurrio exportarlos, pero cuando hacemos la Aplicacion de prueba que llama a la DLL funciona bien , pero al salir nos genera un error que dice "Operacion de Punteros no valida" El Codigo en la DLL seria Asi y en el evento Close del formulario se destruye Cuando lo llamo desde otra Aplicacion se muestra el formulario, realizo todas las operaciones que deseo, luego se destruye el formulario, no hay ninguna queja...pero el problema sucede al salir de la aplicacion que llamo a la DLL, y todo empieza de nuevo... algo estamos haciendo mal , pero no lo vemos, se aceptan sugerencias... Gracias |
Cita:
no creo que sea correcto destruir el formulario cuando todavia esta en uso. |
¿Cómo destruyes el formulario?
No sé cómo sea con una dll pero recuerda que lo indicado es poner Action := caFree y no Form1.Free. // Saludos |
probe con
y sigue con el mismo problema... quizas no debo poner formularios en una DLL, pero que tan cierto es esto... |
Igual me equivoco, pero yo lo pensaría de este modo:
Estas asignando como responsable de la nueva forma a un objeto Application, pero tratandose de que estas cargando el formulario desde una DLL no se ve bien claro a cual Application es a quien le va a colgar el chamaco este procedimiento... porque no puebas (ya que tu mismo te estas encargando de liberar los recursos de la forma) de crear la forma nueva, digamoslo asi, "huerfana" o dicho de otra manera "autosuficiente" :D
Sustituyendo Application por nil no estas haciendo responsable a nadie por tu formulario, asi que al cerrar tu aplicación no tendría porque respingar...supongo Saludos |
No tuve suerte con lo que me recomendaste... Pero seguire insistiendo con esa logica, creo que esta por ahi, el truco...
Gracias por contestar... |
Hola,
Hay algo que no entiendo. Yo realmente no manejo dlls pero recién me hice uno con una función similar y no me muestra ningún error. ¿Cómo realmente exportas la función? Según la ayuda de Delphi, export (sin s final) sólo se usaba en Windows de 16 bits. Yo he exportado la función con: exports MuestraForm; ¿Y cómo la importas a tu aplicación? // Saludos |
Hola Roman...
Les Contare que partí de Cero, he creado una DLL que crea y muestra un formulario. compilé, y todo bien (Se creo la DLL) luego he creado una Aplicación, en ella he creado una unidad donde declaro la DLL
y desde el formulario principal hago una llamado a la DLL desde un boton
Parece que los dioses hoy me han dado un manito, y la aplicación no se ha quejado y no hay ningún error, pero he observado algo interesante y me gustaría que me ayuden en la explicación… La DLL como el ejecutable que se han creado solo pesan 18 y 19 Kb respectivamente… Me imagino que si llevo la DLL y el Exe a otra maquina me va a pedir algunos DLL… La pregunta seria ¿Cómo hago para que el Exe solo dependa de la DLL? Y la DLL sea independiente de cualquier otra… |
Converse con un amigo y me comento que en la opcion Project/Options, en la solapa Packages, en la parte inferior hay una casilla de verificacion "Built with runtime Packages", al estar desactivada se compila, con el codigo necesario para no depender de DLL's
Gracias |
Ayuda con Forms y Databases en Dlls
Hola,
Tengo el problema de poner un form con conexión a base de datos dentro de una dll. El problema que me da es que se pierde la conexión. ¿Cómo puedo solucionarlo, por favor? email: fernandosolis5@gmail.com |
Hola a todos, tengan un buen dia.
Estoy trabajando con Delphi 2005, quiero conectarme a una base de datos de MySQL con componentes ADO desde una DLL, supongo que para lograrlo necesito una forma para poner los componentes en ella, así que estoy probando el código que nos dejó nuestro compañero Esau, pero la siguiente línea Fué cambiada en mi laptop por esta y aquí me marca el siguiente error: Cita:
|
No importa el código que ponga en esa línea, siempre me marca el mismo error, también me pasa con cualquier otro código que no haya empezado yo, si quiero abrir un ejemplo que me pasaron me aparece el mismo error, ya sea un proyecto normal de delphi o un proyecto de DLL... Alguien sabe que es lo que esta pasando? Es algo del delphi 2005?
|
Creo que el error me salia porque estaba tratando de usar código de proyectos de Win32 en proyectos de .Net...
La verdad, no entiendo mucho de esto, pero ahora estoy haciendo proyectos para Win32 y me cambió el error... Ahora es el siguiente: Cita:
|
Creo que estoy empezando a enteder:
La DLL utiliza una forma externa? Creo que la respuesta es "si", así que creé esta forma en otro proyecto y la puse en el mismo directorio en el que tengo mi proyecto de DLL y ya no aparece ese error... ahora me aparece el siguiente: Cita:
Ahora qué pasa? |
Hola Albano, aun no leo completo tu soliloquio de hoy :p pero me llama la atención esto:
Cita:
// Saludos |
Cita:
Cita:
|
Haber si poniéndo imágenes y un poco de código de mi proyecto es mas sencillo expresar lo que quiero hacer:
![]() Aqui se muestra el programa en tiempo de ejecución... En el primer DbLookUpComboBox me aparecen las bases de datos que tengo en mi sistema. También tengo un botón que dice conectar, al darle click a ese botón me conecto a la base de datos que seleccioné en el primer DBLookUpComboBox y aparecen las tablas que ésta tiene en el segundo DBLookUpComboBox. Por último, tengo un botón que dice mostrar datos, ese pone en un query la consulta para que me arroje todos los registros que tengo en la tabla seleccionada al DBGrid. ![]() Aqui muestro mi formulario en el tiempo de diseño, los componentes ADO quiero que esten en una DLL, así como el código que utilizo para conectarme... Ahora pondré el código que utilizo para hacer lo que mencioné arriba. Qué necesito para poner esos componentes y el códgio en la DLL? |
La franja horaria es GMT +2. Ahora son las 02:49:16. |
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