2010-07-27 20 views
7

Tengo una biblioteca de clases escrita en .Net que me gustaría poner a disposición de VB6/VBA. Lo que probé no funcionó (obviamente, como estoy haciendo esta pregunta). Esto es lo que hice:Haciendo que una DLL COM esté accesible

  1. Creé un proyecto de biblioteca de clases en Visual Studio 2010 Express y puse el código en un módulo de clase.
  2. Abrí las propiedades del proyecto y fui a "Información de ensamblaje" y marqué "Hacer COM visible".
  3. Fui a las opciones de "Compilación avanzada" y a .Net 2.0 (es un código muy simple).
  4. Luego eliminé todas las referencias esperadas para "Sistema".
  5. que construyeron el proyecto (no hay advertencias o errores) y copiar el archivo DLL de la carpeta Bin en C: \ Windows \ System32 \
  6. me encontré RegSvr32 para registrar la DLL y tiene el error:

The module "MyDll.dll" was loaded but the entry-point DLLRegisterServer was not found.

Make sure that "MyDll.dll is a valid DLL or OCX file and then try again.

Claramente, mi primer intento fue un poco ingenuo. ¿Podría alguien ofrecer orientación?

+2

regsvr32 no se puede utilizar en ensamblajes .NET. Use 'regasm' y argumentos opcionales - http://msdn.microsoft.com/en-us/library/tzat5yw6%28VS.71%29.aspx –

Respuesta

10

El paso # 6 está mal. Los ensamblados .NET con tipos [ComVisible] se registran con Regasm.exe. Utilice la opción de línea de comando/codebase si no desea instalar la DLL en el GAC. La opción de línea de comando/tlb crea la biblioteca de tipos, puede usar eso en su proyecto VB6.

+0

Hice una búsqueda de archivos para regasm.exe y parece que falta. ¿Esto solo está disponible con la versión completa de Visual Studio? ¿MS ofrece una descarga (todavía estoy buscando en Google, pero pensé que podría saber.) – Oorang

+2

Debe estar en el directorio c: \ windows \ microsoft.net \ framework \ v4.0.30319. Te falta el "Símbolo del sistema de Visual Studio" para que sea más fácil. Pero puede hacerse. –

+0

OK Encontré RegAsm y lo usé. Esto creó un tlb al que pude hacer referencia. Cuando lo abrí en VB6/VBA, faltaban todas las propiedades y métodos. Al leer algunos de los otros enlaces provistos, deduzco que necesito crear una interfaz (algo que no hice, simplemente creé la clase). Todavía estoy retocando la interfaz, pero este fue un paso importante. Gracias. – Oorang

0

Estoy bastante seguro de que RegSvr32 solo funciona en DLL no .NET. Los ensamblados .NET se almacenan en el Caché de ensamblados global (GAC). Tienes que ejecutar el gacutil.exe.

+0

No es necesario ponerlos en GAC. regasm con la clave '/ codebase' estará bien. – sharptooth

+0

@sharptooth: Gracias, no sabía que –

3

Deberá definir GUID para sus interfaces y marcar qué clases implementar qué interfaces, para comenzar. MSDN tiene un getting started guide. No es necesario ejecutar RegSvr32, pero sí es necesario para poner el archivo DLL en alguna parte where the app can find it:

After registering an assembly using Regasm.exe, you can install it in the global assembly cache so that it can be activated from any COM client. If the assembly is only going to be activated by a single application, you can place it in that application's directory.

También hay una buena visión general de todo el proceso here.

+0

+1 Para los enlaces. – Oorang

0

Use GacUtil en lugar de RegSvr32. RegSvr se usa para dll's creado con VB6 y para DLL .NET necesita usar GacUtil porque se agrega a la memoria caché de ensamblaje global.

Cuestiones relacionadas