Librerias dll en tiempo de ejecución.

kipied
21 de Agosto del 2008
Necesito saber si es posible conectarse a una libreria dll en tiempo de ejecucíón. He creado una clase VB, pero si la modifico (por ejemplo al agregarle funciones) y compilarla, estoy obligado a compliar el programa central nuevamente. Mi intención es independizar la .dll del .exe, para así mejorar la versión con sólo cambiar la librería.

en?
21 de Agosto del 2008
kipied, si tienes registrada tu DLL en el systema, el proyecto EXE no lo necesitarás volver a compilar cuando modifiques la DLL.

Como digo, si la tienes registrada en la máquina, te aparecerá en el menú Proyecto>Referencias...
Luego sólo tienes que hacer:
Dim iMiClase As TuProyectoDLL.cClaseDLL

Set iMiClase = New cClaseDLL
Call iMiClase.ProcPublico(Param)
MsgBox iMiclase.PropiedadPublica
...
etc...
Set iMiClase = Nothing 'Destruyes la instancia cuando no la vayas a necesitar más.

También puedes referenciar tu DLL en tiempo de ejecución declarando una variable Object, y creando una instancia a la clase de la DLL:

Dim iMiClase

Set iMiClase = CreateObject("TuProyectoDLL.cClaseDLL")
...
...

_
Un saludo.

kipied
21 de Agosto del 2008
Gracias, pero he hecho lo primero y cuando corro el programa bajo VB me dice que la versión es anterior y se cae. De hecho al compilar nuevamente la Clase en el menú Referencia me aparecen dos librerias con el mismo nombre (la antigua y la nueva, incluso puede haber más dependiendo de las compilaciones que haga). Cuando corro el programa original, pero con la nueva dll, me dice que no tengo "licencia para usar esa aplicación".
Por eso me interesaría si puedes ayudarme. Me interesó la segunda opción, puedes detallarla un poco más ????.
Gracias.

mamerto
21 de Agosto del 2008
La mejor forma de atacar un programa de este tipo es crear un .exe de arranque, porque, porque es muy comun que cuando un proyecto no esta terminado completamente o se esta actualizando, lo que se tiene que hacer es cambiar las dll's modificadas y el exe, esto se vuelve engorroso andar registrando de maquina en maquina nuevamente las dll's, por lo que el tip que te doy es que generes un programa de arranque independiente de tu aplicacion, que verifique cual es la ultima version de las dll's y exe que hayas actualizado, que las copie al directorio correspondiente de tu aplicacion y lo ejecute. si quieres que te amplie mas esta duda postea.

kipied
21 de Agosto del 2008
Gracias mamerto, me interesa lo que tú propones. Este programa de arranque sería un tipo de isntalador (registrar) de las dll??.

mirna cortes
21 de Agosto del 2008
Si eres el Kipied, alias Yerko Collao, que conocí hace años luz, responde,
Mirna Cortés

mamerto
21 de Agosto del 2008
En efecto, Lo que debe hacer el programa es:
1. Colocas las ultimas versiones en determinada carpeta del servidor.
2. cuando alguna estacion de trabajo ejecute tu programa, el arrancador lo que debe hacer es:
a. comparar las versiones de las dll's y el exe.
las que estan en el directorio cliente y las que se encuentran en el servidor.
b. si las ultimas versiones estan en el servidor, copia a la carpeta cliente el exe y los dll's actuales y que los registre.
c. que ejecute tu aplicacion y se cierre el arrancador.

todo por codigo. suerte
ve a esta pagina.
www.somser.com
existe mucho codigo de ejemplo muy bueno, aunque solo te deja descargar 3 ejemplos diarios, pero el que persevera alcanza, y asi podras programar tu arrancador. suerte

kipied
21 de Agosto del 2008
Gracias mamerto. La clave para lo que quiero es registrar la nueva versión de la dll. Entiendo lo del programa de arranque. en mi caso los clientes no son parte de una red (la información se hace vía disquette), pero igual se puede hacer un programa para instalar (registrar) las nuevas dll.
Muchas gracias.