Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Foros > Visual Basic > Librerias dll en tiempo de ejecución.
-Foros de debate

Visual Basic
Lista de foros | Lista de mensajes de este foro

Privacidad: Recuerde que la información escrita en los foros de programación es 100% pública y que su ip será registrada asociada a su mensaje. Si encuentra un mensaje fuera de lugar, por favor, notifiquelo para su revisión y eliminación.

Librerias dll en tiempo de ejecución.
Enviado por kipied el día 5 de enero de 2005

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.

 
Re: Librerias dll en tiempo de ejecución.
Enviado por enço el día 5 de enero de 2005

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.

 
Re: Re: Librerias dll en tiempo de ejecución.
Enviado por kipied el día 6 de enero de 2005

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.

 
Re: Re: Re: Librerias dll en tiempo de ejecución.
Enviado por enço el día 6 de enero de 2005

Bueno, para que la librería esté registrada correctamente, cada vez que quieras actualizarla deberás "desregistrar" primero la versión anterior (regsvr32 -u LibreríaDinámica.DLL) y luego sobreescribirla con la nueva y registrar esta nueva versión (regsvr32 LibreríaDinámica.DLL)

De lo contrario te queda "basura" en System y referencias rotas que sólo te traerán problemas, (como estás comprobando)


Respecto a la segunda opción, algunas veces es interesante poder trabajar con instancias a librerías de las que no tenemos control.
Por poner un ejemplo, si se quisiera trabajar con los objetos de Excel deberíamos agregar su referencia, pero puede darse el caso que en la máquina que desarrollas tenga "Microsoft Excel 10.0 Object Library", o que ni siquiera tenga Excel esa máquina, y la máquina en la que se instalará tenga la versión 9.0 o 11 etc... y en un caso como este usaríamos CreateObject para lo que se conoce como Late Binding (enlace tardío).
El inconveniente que encontrarás con este método es que pierdes el control de sintaxis ya que no dispones de IntelliSense porque el compilador no tiene información de la referencia al no ser la variable un tipo específico, cosa que no sucede al hacerlo como Early Binding usando "New" y una variable del tipo de la clase de la librería, ya que las referencia se crean en compilación y no en ejecución.

Entonces, con CreateObject no tendrás problemas de compatibilidad de versiones, y lo podrás usar igual que lo haces de la primera forma.

Recuerda que para eliminar las referencias erroneas que tengas deberás "desregistrarlas" correctamente, y probablemente eso implicará que debas volver a registrarlas ya que de lo contrario el servidor de registro te devolverá error.

__
Un saludo.

 
Re: Re: Re: Re: Librerias dll en tiempo de ejecución.
Enviado por kipied el día 7 de enero de 2005

Que pasos debo seguir para desregistrarlas??.
Gracias por tu ayuda.

 
Re: Re: Re: Re: Re: Librerias dll en tiempo de ejecución.
Enviado por enço el día 12 de enero de 2005

que tal kipied, se me había olvidado este post :)

Desregistrarlas es de la forma que comenté en el primer párrafo de mi mensaje anterior.

Puedes desregistrarlas desde la linea de comandos, ya sabes en el Menú de Inicio de Windows > Ejecutar...
y ahí tecleas lo siguiente si la DLL está en el directorio de sistema:
regsvr32 -u NombreDeLaDLL.dll

si la DLL está en otro directorio tienes que darle la ruta completa a la librería después del parámetro "-u"

Si tienes algún problema, aquí estamos.
__
Un saludo.

 
Re: Re: Re: Re: Re: Re: Librerias dll en tiempo de ejecución.
Enviado por kipied el día 12 de enero de 2005

Gracias Enço. Lo intentaré y haber que pasa. Te quise enviar un correo pero la dirección que sale dice no existir. (?)

 






Re: Librerias dll en tiempo de ejecución.
Enviado por mamerto el día 12 de enero de 2005

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.

 
Re: Re: Librerias dll en tiempo de ejecución.
Enviado por kipied el día 12 de enero de 2005

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

 


Re: Librerias dll en tiempo de ejecución.
Enviado por mamerto el día 12 de enero de 2005

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

 
Re: Re: Librerias dll en tiempo de ejecución.
Enviado por kipied el día 12 de enero de 2005

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.

 


Si eres el Kipied poeta que alguna vez conocí, responde
Enviado por mirna cortes el día 28 de abril de 2008

Si eres el Kipied, alias Yerko Collao, que conocí hace años luz, responde,
Mirna Cortés

 
Si. Soy yo.
Enviado por Kipied10 el día 21 de agosto de 2008

TM de UA

 



Tienda
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network