![]() |
Clases encapsuladas en DLL y herencia
Hola a todos
Hasta ahora en las DLL almacenaba funciones o procedimientos sueltos que posteriormente se utilizaban en el programa. Ahora estoy experimentando con la idea de encapsular clases completas para utilizarla después y ya he conseguido la parte del encapsulado que realizo de la siguiente forma: Uso una unidad que comparten tanto la DLL como el proyecto y es donde solo se definen las declaraciones abstractas e interfaces publicas de la clase a encapsular (aquí no hay nada en la implementación):
Y para la DLL declaro una clase que hereda de la clase abstracta y es en donde se implementan los procedimientos y funciones necesarios
Compilo, generando la DLL y listo, ya tengo mi clase de prueba encapsulada dentro de la DLL Ahora en la aplicación, cargo la DLL de forma dinámica y declaro una variable que apunta a la clase del objeto exportado
y para utilizar dicha clase lo hago así:
Hasta aquí todo perfecto y funciona correctamente. Ahora lo que pretendo es desde la aplicación generar una clase que herede de la clase almacenada en la DLL, con un código similar a esto pero obtengo el error E2005 'TMyObjectDLL' is not a type identifier
Realmente no se si esto que estoy intentando realizar se puede hacer de alguna otra manera o no es posible... saludos!!! |
En el código anterior tienes esto
Más adelante dices que te funciona esto:
y finalmente el código que te falla:
Si no me he perdido en todo esto TMyObjectDLL no es mas que una instancia de la clase TClassMyObject. Pero al final no deja de ser mas que una variable, no puedes hacer que TOtraMyClass sea una clase hija de TMyObjectDll porque como te dice el mensaje TMyObjectDll no es un TYPE. Podrías hacer: Como digo espero no haberme perdido pero a priori parece que te has despistado, igual por haberle puesto de nombre TMyObjectDLL a una instancia del objeto TClassMyObject. Puede colaborar con el error que funcione el código: pero despues de todo TMyobjectdll aunque sea un instancia tiene un metodo create que devuelve un objeto del tipo TMyAbstractObject, aunque si he seguido bien todo tu código igual te serviría:
|
Gracias engranaje por responder
Cita:
Aquí dejo un enlace a la estructura del programa ![]() y aquí dejo el código fuente por si alguien quiere hacer pruebas: https://www.megaupload.us/10ip/MiEjemplo.rar La idea original que pretendo es cargar una clase desde una DLL, Al igual que cuando se utiliza una función definida en una DLL el programa solo sabe el nombre de la función y los parámetros que utiliza, sin conocer mas nada sobre dicha función y se carga de esta manera
Para utilizar una clase la idea sería algo similar, como poder hacer algo así:
Aunque evidentemente esto no esta soportado, ni lo acepta el compilador, por eso ando buscando alternativas... Como una clase es bastante mas compleja que una simple función, he pretendido utilizar clases predefinidas donde las funciones genéricas al menos estén definidas ya en interfaces y donde el programa que pretende utilizar dicha clase, tenga ya de antemano alguna información sobre la clase |
Cita:
¿Puedes subir el fichero al FTP del club o algún otro sitio "normal"? Después de unas cuantas extensiones que me ha intentado instalar esta web, varias ventanas de publicidad, pedirme que quite el AdBloqcker y unas cuantas esperas, he decidido desistir... :(:( |
Gracias Neftali por responder
Cita:
Aquí esta el enlace al fichero en el FTP del ClubDelphi Leer_Clase_Desde_DLL.rar |
La franja horaria es GMT +2. Ahora son las 18:21:37. |
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