Usar dll de .net en vb6, intenté regasm y no queda del todo

Iniciado por Fucko, 25 Febrero 2021, 06:21 AM

0 Miembros y 1 Visitante están viendo este tema.

Fucko

Hola, tengo unas dll en .net algunas framework 2.x y otras 4.x

el asunto es, que hasta ahora, la 2.x quedó con el regasm, sin, problemas, he creado la tlb y al estar en el explorador de objetos, aparece la dll con sus clases.

no me pasa con la que está hecha en 4.7.2

se que el regasm es otro para hacerlo, no hay problemas por eso, la tlb la pude crear, pero me aparece vaciom sin clases....

que puede ser?

pongamos como ejemplo:

Private Sub cmd_leer_Click()
    dll2x.leer
End Sub


comando usado para 2x

C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm.exe /tlb:dll2x.tlb dll2x.dll

para 4x
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe /tlb:dll4x.tlb dll4x.dll

mientras voy codificando, al poner dll2x y poner el "." ya me aparece lo que necesito, por ejemplo "leer"

pero al hacer en la de 4.x nada....

no aparece nada de nada....

que puede ser?
gracias
Cree en los que buscan la verdad, duda de los que la han encontrado...

Fucko

A nadie le ha pasado? :P
no puedo hacer funcionar las dll .net en el vb6

Cree en los que buscan la verdad, duda de los que la han encontrado...

Fucko

Es imposible usar las dll .net en vb6?

he visto gente que las ha usado, pero no tengo idea como....
Cree en los que buscan la verdad, duda de los que la han encontrado...


Serapis

#4
Claro que las puedes usar... pero no directamente, porque la convención de llamada s de NET es distinta de la convención de llamadas de vb6.

...tienes que crear un wrapper de las funciones que requieres...
1- Debe ser una proyecto de biblioteca de clases.
2 - al añadir el proyecto, ve a a las propiedades del mismo (doble click en 'myproject' en el explorador de soluciones).
3 - Ve a la pestaña 'Aplicación, pulsa el botón información de ensamblado... debajo del GUID, activa la casilla 'Crear ensamblado visible a través de COM'.
4 - En la ficha 'compilar', abajo dle todo, activa la caislla: Registras para interoperabilidad COM'.
5 - Elimina las clases que tenga el proyecto y añade una nueva clase, pero de tipo 'COM Class', esto generará los GUID, para que pueda ser accedido por VB6... (mira la imagen que adjunto). Es decir, vb6 solo verá la funcionalidad de estas clases, puedes tener otras clases si las necesitas, pero serán de NET al 100, y por supuesto puedes usarlas desde esa 'COM Class'... peor para vb6 serán invisibles e inaccesibles. La funcionalidad que quieras acceder tendrá que estar disponible en las 'COM Class' del proyecto.

No puedes usar todo lo que quieras... en las funciones publicas, en las funciones privadas, puedes usar parámetros de NET...
Estos es, los GUID y la clase NEW sin parámetros.
Los constructores con parámetros, son ignorados y las funciones sobrecargadas son renombradas con sufijos numerados. Por ejemplo: Sean 2 funciones llamadas FunX(byval Y as string) y FunX(byval Y as byte)
La 1ª se sigue llamando igual "FunX", la 2ª se renombra como: "FunX_1", es decir esto es lo que se verá por ejemplo desde VB6.0
Así al compilar permite que puedan ser reconocidos por otras plataformas que usan COM.
Explicar cada vericueto es largo y lleva bastante tiempo, lo mejor es que explores por tí mismo...
Una vez que termines el wrapper, compila tu clase/s... y tendrás que registrarla como una clase de NET, pero gracias a los GUID, VB6 ya podrá 'verla' y usarla.

Los errores que cometas en parámetros a llamadas, supondrá volver al código en NET, solucionar el problema, volver a compilar y registrar... y volver a instanciar desde vb6.