Lotus Notes da un error de "External Function Not found" al iniciar programa creado con DLL Active

He hecho una dll en Visual Basic con DLL Active POR y funciona correctamente si le llamo desde otro programa hecho en Visual Basic pero, en cambio, en Lotus Notes da un error de "External Function Not found". Ya he registrado la dll en Windows y he declarado la función en Lotus Notes.
¿Me podrías ayudar? Si tengo que exportar la función, ¿qué pasos tendría que seguir?
1

1 respuesta

Respuesta
1
¿El error que te da es con el componente CommonDialog o que no puede crear el control ActiveX?.
Si es lo primero no se me ocurre que puede pasar, ya que no es normal que te de un error si el registro del control ha sido correcto.
Si es lo segundo me imagino que el error te da en la linea del CreateObject (no se si puedes depurar el código con el Lotus). Algo tiene tu ActiveX DLL que no tienes en la maquina del Lotus, algún componente o referencia del proyecto no esta incluida en la maquina cliente.
Si la maquina del Lotus es la misma que la utilizada para desarrollar el ActiveX DLL el problema es mayor: create una ActiveX DLL nueva muy, muy simple, sin referencias a otros componentes ni nada, intenta instanciar dicha activex para ver si el problema esta en Lotus (no puede instanciar objetos o es que el CreateObject no se puede utilizar así). En este ultimo caso el problema tiene difícil solución.
Ya me cuentas como te van las pruebas que te he propuesto.
Perdona, me he explicado mal. El error da en la función de la dll hecha en Visual Basic, cuando es llamada desde Lotus Notes cuando hago :
Dim cuadroDialogo As Object
Set cuadroDialogo = CreateObject("MSComDlg.CommonDialog"). Es decir, el objeto se crea en tiempo de ejecución, no en tiempo de diseño
No has registrado el "Microsoft Common Dialog" (comdlg32.ocx) en la maquina con el Lotus.
El problema que me da es que no puede crear el CommonDialog. La dll funciona bien excepto cuando tiene que hacer el CreateObject del commonDialog. Es ahí cuando da el error.
Si se te ocurre algo más que probar, me lo comentas. De todas formas, muchas gracias por todo. Yo seguiré intentando solucionar este tema.
Un saludo,
Nora
Desde Lotus Notes he definido bien la librería. El problema es que la función no la encuentra. Es como si no sería pública o no estuviera exportada. ¿Se pueden exportar las funciones de una dll en Visual Basic? Yo simplemente la he puesto como Pública.
Por cierto, el problema no es de Lotus Notes, porque siempre lo he hecho así con dlls realizadas en C y nunca me ha dado ningún error. Así que, ¿puede ser que no he exportado la función en Visual Basic? En ese caso,¿qué pasos tengo que seguir?
Muchas gracias,
Nora
En visual basic las librerías no son "verdaderas" librerías como las de C. Son ActiveX, es decir, son objetos y como tales deben ser instanciados para poder acceder a sus procedimientos y funciones publicas.
En VB seria algo así:
Dim ObjAux As Object
'Instanciar la libreria milibreria.dll haciendo referencia a una clase publica definida en ella
Set ObjAux = CreateObject("milibreria.miclasepublica")
'Llamada al procedimiento publico sin parametros
ObjAux.ProcedimientoPublico
'Llamada a la funcion publica booleana con un parametro
If ObjAux.FuncionPublica(valor) Then
End If
'Cuando termines el programa
Set ObjAux = Nothing
No se si puedes aplicar esto en el Lotus, pero desde VB se hace así.
De todas maneras si tienes más problemas ya me los comentas.
¿No entiendo eso de hacer el createobject del Commondialog?. No se puede hacer un createobject de un control (ocx). Los controles están referenciados en los componentes del proyecto ActiveX Dll y, una vez puestos en el diseño del proyecto, ya se podrán utilizar. No hay que instanciar nada.
Creo que no se puede generar el commondialog con el createobject. Puedes probar dos cosas:
1) Ponte un formulario en el ActiveX DLL con el control del commondialog, de tal manera que cuando se llame al procedimiento para mostrar el cuadro de dialogo, lo haga a través del control.
2) Hay una dll (dlgobjs.dll) que tiene la misma funcionalidad que el commondialog, pero no tiene que estar "atado" a un formulario pues no es un control sino una dll. Si quieres más información sobre esto me lo comentas.
Ya he registrado el comdlg32.ocx poniendo:
regsvr32.exe c:/comdlg32.ocx y me lo ha registrado correctamente, pero me sigue dando el mismo error: que no puede crear el control activeX
Ya he probado a instanciar la librería y ya funciona correctamente. Unicamente, me da un error de que no se puede crear un componente Active POR : CommonDialog.
¿Me podrías ayudar?
Muchas gracias
No se como se manejan los activex desde el lotus notes, debo imaginar que igual que en cualquier otro sitio.
Como no se puede poner una referencia al activex dll creada me imagino que utilizaras el "CreateObject" para instanciar la dll.
Si todo esto lo has hecho, es muy raro que no puedas acceder a cualquier función publica que tengas definida en el activex dll, ¿el problema es con esa activex o te pasa con cualquier otra? (Me refiero accediendo desde el Lotus).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas