Autor
|
Tema: Problema con dll's (Leído 2,160 veces)
|
Thaorius
|
Bueno, les queria preguntar como puedo hacer para cargar una dll echa en vb mediante codigo.
Lo nesecito para esto: Un programa de administracio nde bases de datos con modulos. Osea, que permite supongamos un modulo para una base de datos de inmobiliaria, otro para no se, una farmacia, etc. Todo esto con un comando en el accesos directo, supongamos -module farmacia,etc. La cosa es que el programa carga de un archivo ini los datos del modulo, como el nombre de la dll de ste y la carga para posteriormente ejecutar sus funciones.
EL problema es que no se como hacer para cargar la dll desde vb. Si es una dll de c++ la cargo como una pai pero no se para las de vb.
Saludos y espero me ayudarme.
|
|
|
En línea
|
|
|
|
Slasher-K
Desconectado
Mensajes: 1.477
|
Con la función GetObject podés crear dinánimacamente objetos desde un archivo. Dim oObject As Object
Set oObject = GetObject("C:\MyLibreria.dll", "Class1")
También se pueden crear documentos de Word o Excel o cualquier archivo preparado para automatización. Saludos.
|
|
|
En línea
|
A la reina de las profundidades que cuida los pasos de una sombra en la noche :*
|
|
|
Thaorius
|
Bueno, probe con este codigo: Private Sub Form_Load() Dim ErrorDll As Object Set ErrorDll = GetObject("c:\error.dll", "ErrorReporter") ErrorDll.CriticalError End Sub
Pero me dice que ActiveX no puede crear el objeto. La funcion de la dll que quiero usar es CriticalError. Eh de supoenr que tengo que crear un objeto dentro de la dll para usarlo y que ErrorReporter debe ser una clase, como dice msdn pero sinceramente no tengo idea de como hacerlo. Ahora busco en google, pero si sabes(seguro que si(xD)) por favor postealo. Saludos
|
|
|
En línea
|
|
|
|
Slasher-K
Desconectado
Mensajes: 1.477
|
Proyecto->Agregar módulo de clase Al módulo de clase lo llamas ErrorReporter. Dentro del módulo sopongamos que escribis la función CriticalError. Entonces compilas la DLL y para llamar a la función usás el siguiente código: Private Sub Form_Load() Dim oErrorDll As Object
Set oErrorDll = GetObject("c:\error.dll", "ErrorReporter")
Call oErrorDll.CriticalError End Sub
Y así debe funcionar, el error que se produjo fue porque el módulo de clase no existía o su propiedad Instancing no estaba establecida a 5-MultiUse. Saludos.
|
|
|
En línea
|
A la reina de las profundidades que cuida los pasos de una sombra en la noche :*
|
|
|
Thaorius
|
Las 2 cosas, estaba en GlobalMultiuse Sigue sin andar ... El codigo que tengo es este: Private Sub Form_Load() Dim oErrorDll As Object Set oErrorDll = GetObject("c:\error.dll", "clsErrorReporter") Call oErrorDll.CriticalError End Sub Y la dll esto: Public Sub CriticalError() MsgBox "DB Admin produjo un error crítico en el sistema y debe cerrarse.", vbCritical, "Error" End Sub Su instancing esta a 5-Multiuse y la dll esta en c:\ y la clase se llama clsErrorReporter. Que puede ser? Saludos
|
|
|
En línea
|
|
|
|
Slasher-K
Desconectado
Mensajes: 1.477
|
Bueno veo que con GetObject no funciona , pero debería. Modifiqué el código usando CreateObject para que cree el objeto desde el registro. Por si no está registrada primero usa el programa REGSVR32 que se utiliza para registrar componentes ActiveX y está en todas las máquinas con Windows 95 o superior. Private Sub Form_Load() Dim oErrorDll As Object Call Shell("regsvr32.exe /s C:\error.dll") Set oErrorDll = CreateObject("Error.clsErrorReporter") Call oErrorDll.CriticalError End Sub
La nomenclatura siempre es la misma para las clases en el registro: NombreDll.NombreObjeto Saludos.
|
|
|
En línea
|
A la reina de las profundidades que cuida los pasos de una sombra en la noche :*
|
|
|
Thaorius
|
... definitavamente no es mi dia de suerte. No anda tampoco, y tira el mismo error . ¿que sera? Saludos
|
|
|
En línea
|
|
|
|
|
Thaorius
|
Era el nombre del proyecto. Que era ErrorReporter y no error. Errores tontos. Bueno, estoy contento porue ya anda. Ahora me agarro los tutos de leer ficheros ini del guille y a aseguir programando. Saludos y gracias.
|
|
|
En línea
|
|
|
|
|
|