none
Interoperabilidad, Desarrollar una dll en c# y que sea consumida desde vb6 RRS feed

  • Pregunta

  • Hola a todos, soy nuevo aquí, buen día tengan todos ustedes, espero alguien me pueda orientar con esta cuestión, no se que este haciendo mal; en el foro incluso ya vi de alguien de argentina que ya logro hacer esto que les voy a escribir a continuación.

    Realice una dll en c#2012 si la consumo desde mismo c# no tengo detalle alguno; si la preparo para COM manualmente desde la CMD de visual studio 2010( csc: para generar el module, sn: para generar la llave, al: para ligarla y crear la .dll, gacutil: para agregarla al GAC, tlbexp: para exponerla a COM y por ultiimo regasm: para registrarla; la puedo usar sin detalle desde un programa realizado con VB6. El detalle es que no me es para nada practico el tener que instalar el VS 2010 para despues tener que preparar la libreria manualmente con todolo descrito anteriormente, y todo eso en cada maquina donde usaran el programa realizado en VB6.

    Ya intente hacer un instalador que registre la dll pero no me genera el archivo .tlb incluso pongo como parte de los ditributables el netframework 4.5 y nada instala segun la dll pero al querer agregarla en un proyecto de vb en la pc no aprece y si la busco manualmente donde el instalador la dejo no me permite agregar la dll y no genera el .tlb; que es el que sin problemas puedo agregar y usar desde vb6 cuando hago todo el proceso manualmente.

    Ya tambien intente copiar los tres archivos .dll .netmodule y .tlb a la pc de implementacion y tambien las herramientas (sn,al,gacutil, tlbexp) y desde una cmd de windows intentar hacer todo manualmente y si lo hace supuestamente, incluso si veo la libreria en agregar referencias del proyecto de vb y si es el tlb el que me aparece. De este modo si lo puedo usar y al compilar no me marca detalle alguno solo al momento ya de tratar de instanciar marca error.

    Por favor alguien apoyeme con esto, no se que estoy realizando mal...de antemano mil gracias a todo por su tiempo...

    viernes, 11 de diciembre de 2015 19:56

Respuestas

  • En principio debería funcionar directamente desde Visual Studio si en las Propiedades del Proyecto le marcas la casilla "Register for COM Interop". Cuando está chequeada, al compilar ya se registra en esa máquina y queda lista para usarla desde COM. No se necesita el .tlb; con el procedimiento anterior la tabla de tipos se embebe dentro de la DLL (en lugar de sacarla al .tlb), cosa que al VB le sirve sin ningún problema.

    Para desplegar la DLL en otra máquina, tienes que tener en esa máquina el Framework de .NET en la misma versión que usaste para compilar la DLL. Después tienes que instalarla en el GAC, cosa que se puede hacer con GACUTIL o con un programa de instalación. Esto requiere que tenga un Strong Name, cosa que se puede hacer desde dentro de Visual Studio escogiendo las opciones correspondientes en las Propiedades del Proyecto. Finalmente, se registra con REGASM, y con eso ya debería poderla usar cualquier programa en VB desde esa máquina.

    sábado, 12 de diciembre de 2015 12:24
    Moderador
  • hola

    >>El detalle es que no me es para nada practico el tener que instalar el VS 2010 para despues tener que preparar la libreria manualmente con todolo descrito anteriormente

    pero se supone que la compilacion solo la realizas una vez, despues la libreria compilada la registras dentro de COM para poder usarla en VB6

    Pero no necesitas de VS2010 todo el tiempo

    USA .NET en VB6

    lo que necesitas si es tener el framework de .net en la pc del usuario (para poder usar el regasm.exe), pero no todo el VS

    >>Ya intente hacer un instalador que registre la dll

    que tipo de instalador usaste ? es un setup project del VS

    >>De este modo si lo puedo usar y al compilar no me marca detalle alguno solo al momento ya de tratar de instanciar marca error.

    que error se genera cuando instancias ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    sábado, 12 de diciembre de 2015 13:10

Todas las respuestas

  • En principio debería funcionar directamente desde Visual Studio si en las Propiedades del Proyecto le marcas la casilla "Register for COM Interop". Cuando está chequeada, al compilar ya se registra en esa máquina y queda lista para usarla desde COM. No se necesita el .tlb; con el procedimiento anterior la tabla de tipos se embebe dentro de la DLL (en lugar de sacarla al .tlb), cosa que al VB le sirve sin ningún problema.

    Para desplegar la DLL en otra máquina, tienes que tener en esa máquina el Framework de .NET en la misma versión que usaste para compilar la DLL. Después tienes que instalarla en el GAC, cosa que se puede hacer con GACUTIL o con un programa de instalación. Esto requiere que tenga un Strong Name, cosa que se puede hacer desde dentro de Visual Studio escogiendo las opciones correspondientes en las Propiedades del Proyecto. Finalmente, se registra con REGASM, y con eso ya debería poderla usar cualquier programa en VB desde esa máquina.

    sábado, 12 de diciembre de 2015 12:24
    Moderador
  • hola

    >>El detalle es que no me es para nada practico el tener que instalar el VS 2010 para despues tener que preparar la libreria manualmente con todolo descrito anteriormente

    pero se supone que la compilacion solo la realizas una vez, despues la libreria compilada la registras dentro de COM para poder usarla en VB6

    Pero no necesitas de VS2010 todo el tiempo

    USA .NET en VB6

    lo que necesitas si es tener el framework de .net en la pc del usuario (para poder usar el regasm.exe), pero no todo el VS

    >>Ya intente hacer un instalador que registre la dll

    que tipo de instalador usaste ? es un setup project del VS

    >>De este modo si lo puedo usar y al compilar no me marca detalle alguno solo al momento ya de tratar de instanciar marca error.

    que error se genera cuando instancias ?

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina


    sábado, 12 de diciembre de 2015 13:10