none
Llamar desde VB6 a una dll escrita con VS 2008 RRS feed

  • Pregunta

  • Hola a todos, 

    Desde VB 6.0 estoy llamando a una función de una dll escrita en 2008 usando 

    Declare Function MyFunction Lib "mydll.dll" () As Integer

    La llamada se hace correctamente en mi ordenador, sin embargo cuando instalo (con el instalador) el programa en otro ordenador me dice que no reconoce la dll. Error 48 en tiempo de ejecución. No se ha encontrado mydll.dll.

    Agradecería una ayuda si alguien conoce el tema

    Un saludo.

    martes, 12 de junio de 2018 9:41

Todas las respuestas

  • Si no encuentra el archivo, debe usted verificar dónde lo tiene.  Lo más fácil es tener la DLL en el mismo directorio que el archivo ejecutable de VB6.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    martes, 12 de junio de 2018 12:09
  • Hola Jose, 

    Gracias por tu respuesta. Sí, por supuesto, la dll está junto con el ejecutable. Funciona correctamente en mi ordenador (el pc de desarrollo), pero no en otras máquinas. Estoy probando distintos tipos de compilaciones en la dll 2008 pero el ejecutable VB6 no la encuentra; es muy raro.

    martes, 12 de junio de 2018 12:14
  • Si la DLL está en el mismo directorio que el ejecutable que la consume, entonces es una dependencia de la DLL la que no carga.  Hace años que no compilo C/C++, que imagino es lo que está usando para crear la DLL en VS 2008.  Aunque no es lo más recomendado, puede compilar con las opciones de "static linking" (no recuerdo el nombre en español) para los runtimes de C.  De esa forma no dependerá de que la versión correcta del runtime de C++ esté instalado en la PC destino.  Claro, lo que MS recomienda es dynamic linking e instalar el runtime apropiado en la PC de destino.


    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    martes, 12 de junio de 2018 12:18
  • Lo siento, no lo entiendo muy bien. Cómo puedo ver cual es la versión de runtime C++ en cada ordenador y así puedo al menos comprobar si son diferentes? Y cómo la actualizaría en la máquina de destino?

    Muchas gracias

    martes, 12 de junio de 2018 12:22
  • Mi instalación tiene una dll de Visual C++ 6.0 y una dll en C++ con VS 2008. 

    De la siguiente página https://www.softzone.es/2016/05/28/muchas-aplicaciones-microsoft-visual-c-redistributable-instaladas-windows/ me he descargado los diferentes Distributa bles que ofrece Microsoft y los he instalado todos (tenía buena pinta)... pero con ninguno de estos distributables de Microsoft mi aplicación encuentra su dll en 2008 (aunque en mi pc de desarrollo sí la encuentra)

    martes, 12 de junio de 2018 12:50
  • Instale Dependency Walker en la PC donde tiene problemas y utilice esta aplicación para "abrir" su DLL.  Dependency Walker le dirá si hay alguna dependencia que no carga.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    martes, 12 de junio de 2018 13:15
  • Estimado Jose, 

    Muy interesante el programa que me has propuesto: Dependency Walker. Así he podido averiguar que mydll.dll no encuentra MFC90UD.DLL ni MSVCM90D.DLL; sin embargo estas dll sí están en mi pc de desarrollo. De modo que imagino por aquí va el problema.

    Lo que me extraña es que ningún redistributable de Microsoft instala estas dll's que me faltan. He probado a instalar todos los vcredist_x86.exe que hay en la red y ninguno acaba instalándolas. 

    Te suenan de algo esas dll's. Sabes si existe algún distributable concreto para una dll de clases?

    Un saludo y gracias!!


    martes, 12 de junio de 2018 14:35
  • Acabo de confirmar algo muy particular!. Si mydll.dll la compilo en modo Debug da el famoso error 48 desde VB6. Sin embargo si la compilo en modo Release sí es posible llamarla (aunque da errores dentro de la función) y ya no da el error 48. 

    Si analizo mydll.dll compilada en modo Release con Dependency Walker ya no tiene como referencia interna a MFC90UD.DLL. Imagino que encuentra otro camino para hacer la llamada a la función, sin embargo como contaba no funciona al dar un error de protección

    Realmente curioso, aunque me devuelve a la casilla de salida.

    martes, 12 de junio de 2018 17:15