none
Construir una dll y usarla luego en vba de Access RRS feed

  • Pregunta

  • Hola

    He buscado en este foro un tema parecido pero he encontrado respuestas de hace algunos años y las cosas han cambiado bastante, así que esperando me disculpen, vuelvo con el tema: como construir una dll y usarla luego en vba de Access. Estoy utilizando VS Enterprice 2017 en W10 de 64 bits y la idea es usarla en Access 2010 en W7 32. Debo decir que no soy para nada un experto en VB.NET solo he hecho un par de códigos muy concretos.

    Buscando en san google encontré varios ejemplos pero las explicaciones son diversas así que probé creando varios proyectos y no le he logrado. Si se selecciona Visual Basic aparecen como posibles Biblioteca de Classes (.NET Standard, .NET Framework, Portatil Heredada, Windows Universal ) y solo en el primer caso en el panel de la derecha que dice Tipo: no se especifica nada de .dll, esto generaría mi primera pregunta ¿ cual es el correcto ?.

    He probado con .NET (Standard y Framework) en el caso del primero solo me aparecía en Propiedades del proyecto en "Aplicacion->Plataforma de destino" Framework 2.0 o menor y en [Información de ensamblado] marqué "Crear ensamblado visible...". En tipo de aplicacion dejé por defecto "Biblioteca de clases", en la siguiente pestaña "Compilar" en Plataforma: escogí "Any CPU" y en "CPU de destino" x86 que es mi caso, en la carpeta debug se generó un dll.

    En el caso de .NET Framework además está la posibilidad de en "Compilar" marcar la casilla "Registrar para interoperabilidad COM" cosa que hice y al parecer de forma automática me registra la .dll o el .tlb en mi pc w10.

    De prueba hice este pequeñisimo codigo para la dll:

    Public Class Bascula
        Public Function Suma(a As Integer, b As Integer) As Integer
            Suma = a + b
        End Function
    End Class

    y en Access:

    Sub x1()
        Dim aa As Bascula.Bascula
        Set aa = New Bascula.Bascula
        MsgBox aa.suma(1, 2)
    End Sub

    Si trato de en Herramientas->referencias... hacerlo con la dll me sale el error "No se puede agregar una referencia al archivo especificado", sin embargo con la .tlb lo hace bien y el código funciona.

    Si me lo permiten voy a la segunda parte del problema y es cuando trato de registrar en el W7; he usado regsrv32 y en el caso de la dll me da el error:

    "Se cargó el módulo C:\.....dll, pero no se encontró el punto de entrada DllRegisterServer. Asegúrese que C:\... es un archivo DLL u OCX válido he intentelo de nuevo."

    en el caso de la .tlb:

    "Es posible que el módulo C:\...tlb no sea compatible con la versión de windows que ejecuta. Comprueba si el módulo es compatible con una versión x86 o x64 de regsvr32.exe" cosa que pensé que estaría solucionada si como mas arriba os comenté seleccioné para x86.

    Buscando y buscando encontré la variante de usar "C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe" y me registra la dll pero me da error con la tlb y de igual forma no puedo referenciar la dll en el vba.

    Perdonen la extensión del tema pero quiero que tengan bastante información sobre los pasos que he dado, y entonces la segunda pregunta es, ¿ que no estoy haciendo bien, que concepto del COM, DLL, OCX estoy interpretando mal ?.

    Muchas gracias por vuestra paciencia, saludos

    martes, 28 de mayo de 2019 15:08

Respuestas

Todas las respuestas