Joaquin Trujillo


Cargar DLL dinámicamente en VB.NET
noviembre 16, 2007, 8:11 pm
Filed under: .NET | Etiquetas:

El día de hoy aprendí algo que quiero compartirles, hace algunos días surgió la necesidad de agregar DLL’s dinámicamente en el sistema que estoy desarrollando actualmente y esos DLL no se sabe cuantos y cuales pueden ser sino hasta que el sistema ya se está ejecutando, hoy que tomé este tema para investigar y realizar la debida implementación me encontré con mucha información con diferentes maneras de poder hacer esto pero ninguna de ellas funcionaba,  investigando un poco más encontré lo siguiente:

Dim asm As Assembly= Assembly.LoadFrom(“miArchivo.dll”)

Dim obj = asm.CreateInstance(“ClassNameDLL”)

obj.MetodoDLL

Incluyendo el código anterior podemos cargar dinámicamente DLL’s a nuestra aplicación, es importante tomar en cuenta que:

1. Debemos importar System.Reflection para hacer uso de Assembly

2. Debemos asegurarnos de usar LoadFrom y no Load (de lo contrario nos vamos a encontrar con un error bastante extraño)

3. La primer línea de código hace referencia a “miarchivo.dll” este es el nombre del DLL que queremos cargar dinámicamente.

3. La segunda línea de código hace referencia a un “ClassNameDLL” este es el nombre de la clase de nuestro DLL, importante tomar en cuenta que si el DLL tiene configurado un Root namespace debemos incluir este seguido del nombre de la clase, ej. NameSpace.ClassNameDLL

4. Una vez hacemos referencia al archivo DLL y a la clase podremos hacer uso de todos los métodos y/o funciones disponibles en el DLL.


17 comentarios so far
Deja un comentario

hola, donde te puedo hacer una pregunta que no está incluida en ningún tema de los que tienes publicados ?

Comentario por rommel

Mi correo es djoaquin@gmail.com podemos platicar por esa vía, saludos!.

Comentario por Joaquín

Gracias me ha sido de mucha ayuda esta información, ya que estoy creando un aplicacion que necesita imprimir en impresoras de matriz de punto, de diferentes modelos y tamaños… y ahora podre modificar las coordenadas en la dll para cada impresora dinamicamente…

Comentario por Luisk

Luis: de nada, un gusto ayudar😀

Comentario por Joaquín

Gracias por su codigo sirvio de mucho.

Comentario por Jonathan

Que tal, soy nuevo en esto y tengo una duda, espero me puedas aclarar u orientarme al respecto…. estoy haciendo una aplicacion en VB.Net en la que las variables globales las estoy metiendo a un modulo. Mi duda es ¿Puedo meter en una dll las variables globales de la aplicacion? si es asi ¿como las deberia declarar? ya que en el modulo las declaro como friend nom_variable as tipo

De antemano muchas gracias…

Comentario por ricardo

Muy buenas…

Pues a decir verdad yo buscaba esta info desde hace rato, gracias…

ahora, tengo una duda, como cargar/usar una dll, pero q ire agregando luego, debo saber desde ya el nombre q dare a cada dll y classname??

lo q pasa es q no se cuantas dll agregue luego al proyecto, y mi intension es hacer algo como lo q hace visual studio .net, instalamos componentes y este agrega controles segun el componente q se instala…

espero me comprenda, porq soy fatal para explicarme…😀

gracias de antemano…

saludos…

Comentario por Guido

Hola iniciando en esto espero y me puedan ayudar resulta que dentro de un ETL tengo Script task en donde se recibe un numero de empleado y se lo pasa a una función que devuelbe el correo electrónico esta función viene dentro de una DLL a la cual trato de hacer referencia pero solo me permite referenciar las DLL que vienen dentro del frame work. ¿Como puedo referenciar una dll mediante código? El único método que me permite el Script task es Public Sub Main() donde necesitaría por medio de código hacer la referencia a la dll espero y me puedan ayudar

Comentario por Luis

Hola, he creado una aplicación que genera documentso de Word 2007. Mi pregunta es: ¿Cómo eliminar dinámicamente las DLL de la versión actual en caso de que algun usuario desee continuar con una versión anterior o cuando se actualice a una versión superior?

Comentario por Roberto

Amigo excelente aporte, estube aplicando y funciona genial, pero como todo siempre hay detalles que no se saben.. a ver si me ayudas…
Quiero cambiar la instancia segun una seleccion pero cuando lo aplico me la deja como nothing

Public Class Ejemplo

Dim asm As Assembly= Assembly.LoadFrom “miArchivo.dll”)

Private Sub Combobox1.selectindexchange…..
Dim obj = asm.CreateInstance(“ClassNameDLL”)
end Sub

end class

No me acepta New .. no se como 😦

Te agradeceria una manita
de antemano muchas gracias por el post

Comentario por Gerardo

Muy bueno me ayudo a revolver el problema,
Como libero al dll de memoria
Gracias

Comentario por Ricardo Lopez

Para liberar la dll de memoria crea un destructor para limpiar lo q uso la dll internamente, lo invocas y después otra linea de código donde

Algo así

Mydllobj = nothing.

S2

Comentario por Juan

Por cierto esta bueno el truco

Comentario por Juan

hola estoy empezando con la programacion tengo una dll en c++ y quiero utilizar sus funciones. ejemplo
dll:
todoCOM.dll
todoCOMCLASS
Interface iconnect
interface event.

en esta dll cada interface tiene su funcion especifica como tomaria yo tu ayuda que publiscate aqui gracias mi correo es: cumanaactiva@@gmail.com

Comentario por arnaldo

gracias me sirvio de gran forma esto hermano

Comentario por Martín

Penny Lee…

Cargar DLL dinámicamente en VB.NET « Joaquin Trujillo…

Trackback por Penny Lee

posicionamiento seo en cordoba

Cargar DLL dinámicamente en VB.NET | Joaquin Trujillo

Trackback por posicionamiento seo en cordoba




Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s



A %d blogueros les gusta esto: