La Web del Programador: Comunidad de Programadores
 
    Pregunta:  54686 - DLL CREADA EN VS.NET NECESITO USARLA EN VB6.0
Autor:  Xavier Moreno
Tengo una dll llamada Utilitarios.dll que fue creada en vs.net (no se que version), la utilizo en vb.net 2005 y funciona bien, aunque no me permite registrarla, pero en .Net eso es lo de menos...

Ahora la necesito usar en vb6.0 pero ahi SI tengo que registrarla sino no puedo usarla.. Cuando lo intento me muestra un error.

"No se pudo encontrar el punto de entrada DllRegisterServer"

Segun medio me explicaron debo pasar esta dll por una especie de proceso de conversion usando COM, pero no tengo ni idea de como hacer...

Me pueden ayudar???

  Respuesta:  AGVR
Conceptos previos :

a.- Assembly (Ensamblado)

Un ensamblado es un conjunto de módulos administrados relacionados lógicamente. Los ensamblados no se ejecutan
así mismos sino que son ejecutados por una plataforma que forma parte del Framework de .NET,
el CLR (Common Language Runtime). De ahí el concepto de código administrado. La ejecución de los ensamblados
de NET es realizada por el CLR y puede administrarse por ejemplo para controlar conceptos como el manejo de
versiones y algunas otras características que determinarán el comportamiento de la aplicación.

b.- Global Assembly Cache (GAC)

El GAC corresponde a un área común donde se almacenan los ensamblados de .NET. Un ensamblado de .NET puede ser
privado para la aplicación (ubicado en directorio bin de la aplicación) o global para ser consumido por más de
una aplicación. Cuando este es el caso (ensamblado global), lo que se debe hacer es poner el ensamblado en el
GAC. Con esto se evita tener que especificar una ubicación fija para el ensamblado a través de la directiva
'codebase'. Para nuestro ejemplo pondremos el ensamblado en el GAC para garantizar que podrá ser ubicado por
nuestra aplicación VB6.

c.- Firma de ensamblados (Strong Name)

Antes de poner un ensamblado en el GAC, este debe ser firmado para garantizar que tenga un identificador único
dentro del GAC. Este identificador se conoce como Strong Name, que es obtenido a partir del nombre del archivo,
la versión y una llave publica/privada. Toda esta información se obtiene desde el archivo de ensamblado
(Assembly.vb en el caso de una aplicación VB.NET). La llave publica privada se proporciona a través de un arhivo .snk
que puede ser obtenido utilizando la herramienta SN.EXE del SDK de .NET. Esta herramienta genera un archivo (.snk)
que debe ser referenciado utilizando el atributo AssemblyKeyFile en el archivo de ensamblado de la aplicación.
A continuación se muestra un archivo de ensamblado donde se ha agregado una referencia a la llave generada con
la herramienta SN.exe

/***********************************************************************************************************************
/***********************************************************************************************************************
/********************** VB 6.0 - Registrar las Dll's en el GAC (Global Assembly Cache) ********************************
/***********************************************************************************************************************

1) Comentar en el archivo Asemblyinfo.cs la referencia hacia el archivo .snk

2) Verificar en propiedades del proyecto
Propiedades de Configuracion -> Generar
(Registrar para Interoperatibidad COM) este sin check

3) Compilar las dll's
(Copiar la dll - SJT_Lectura en la carpeta bin del proyecto SJT_In)

4) Una vez generadas las dll's, necesitamos crearle nombres a las dll's para poder registrarlas en el GAC.
El comando es el siguiente:

Nota .- Para ejectura los comando las dll's y los exe tienen q estar en la misma carpeta
Ingresar por DOS y posicionarnos sobre la carpeta q contiene todos los archivos, ejecutar lo siguiente

sn.exe -k SJT_InDll.snk
sn.exe -k SJT_DatosDll.snk
sn.exe -k SJT_LecturaDll.snk

5) Volvemos al proyecto .net y el nombre que se crea, se debe setear en el archivo Asemblyinfo.cs del proyecto correspondiente. (Descomentar)

6) En propiedades del proyecto (Registrar para Interoperatibidad COM) este con check, compilamos nuevamente los proyectos.
(Copiar la dll - SJT_Lectura en la carpeta bin del proyecto SJT_In)

5) Luego de haber creado y seteado el nombre se debe registrar la dll en el GAC con el siguiente comando:
Nota .- Para ejectura los comando las dll's y los exe tienen q estar en la misma carpeta
Ingresar por DOS y posicionarnos sobre la carpeta q contiene todos los archivos, ejecutar lo siguiente
Global Assembly Cache Tool (Gacutil.exe)

gacutil /i SJT_In.dll
gacutil /i SJT_Datos.dll
gacutil /i SJT_Lectura.dll

6) Ya registrada la dll, se puede utilizar en el proyecto VB 6.0 agregando la referencia en la opción del menú Proyecto -> Referencias

Nota .- Quitar las referencia del proyecto vb 6.0
Si al probar no sale la informacion correcta, borrar las referencias de las dll's creadas en:
C:WINDOWSassembly (SJT_In, SJT_Datos,SJT_Lectura)