register ra0000 net example error c# excel dll vb6 interop

c# - ra0000 - regasm net dll registration



Una DLL simple de C#: ¿cómo la llamo desde Excel, Access, VBA, VB6? (4)

Tengo una biblioteca de clases simple escrita en c #.

using System; namespace TestDll { public class Test { public string HelloWorld { get { return "Hello World"; } } } }

Mi pregunta es ¿cómo puedo llamar a esta función HelloWorld desde Microsoft Office Visual Basic (que creo que es VB6)?

Mi primer paso fue agregar el archivo DLL como referencia, pero al explorar y seleccionar el archivo DLL compilado, aparece el mensaje "No se puede agregar una referencia al archivo especificado". fue lanzado.

¿Alguien puede señalarme en la dirección correcta sobre por qué / cómo hacer que funcione?

Gracias de antemano SO!


No puede acceder a un miembro estático a través de la interoperabilidad COM. De hecho, su código ni siquiera compila, el método debe estar en una clase. Aquí sabrás como podrás hacerlo:

[InterfaceType(ComInterfaceType.InterfaceIsDual)] [Guid("01A31113-9353-44cc-A1F4-C6F1210E4B30")] //Allocate your own GUID public interface _Test { string HelloWorld { get; } } [ClassInterface(ClassInterfaceType.None)] [Guid("E2F07CD4-CE73-4102-B35D-119362624C47")] //Allocate your own GUID [ProgId("TestDll.Test")] public class Test : _Test { public string HelloWorld { get { return "Hello, World! "; } } }

La pestaña Generar de las propiedades del proyecto, seleccione Registrarse para interoperabilidad COM. Para que pueda ver los resultados rápidamente. Para instalar el dll en otra máquina necesita usar regasm.

Para luego consumir esto:

Dim o : Set o = CreateObject("TestDll.Test") MsgBox o.HelloWorld

También puede hacer referencia al archivo dll y usar el enlace anticipado:

Dim o As TestDll.Test Set o = New TestDll.Text MsgBox o.HelloWorld


Para agregar a la buena respuesta de AnthonyWJones, también necesitará registrar su DLL usando Regasm.exe que agrega las entradas de registro necesarias.


Solo quería comentar que en Visual Studio 2008, para obtener el archivo .tlb generado también debe ir debajo de la Aplicación | Información de ensamblaje y seleccione "Hacer visible el ensamblado COM". Me tomó un tiempo encontrar eso, así que espero que ayude a otros.


Y para expandir el registro de la DLL en diferentes computadoras.

Una vez que compile y construya el código anterior en su máquina de desarrollo, si tiene

La pestaña Generar de las propiedades del proyecto, seleccione Registrarse para interoperabilidad COM.

su carpeta de salida de Visual Studio (generalmente bin / Debug) donde se encuentra el compiled * .dll también tendrá un archivo * .tlb.

Este archivo * .tlb es una ''Biblioteca de tipos''. Y el equipo del cliente lo necesita para comprender los diferentes ''Tipos'' en su * .dll y básicamente decirle al equipo del cliente cómo usarlo.

Al configurar lo anterior, "Registrarse para interoperabilidad COM", así como también se está produciendo un archivo * .tlb, el ensamblaje (dll) se registra en su máquina y, por lo tanto, se puede acceder a él.

En VBA ahora puede agregar este archivo como referencia por

VBA Editor -> Herramientas -> Referencias -> Buscar -> Seleccionar

esto te permitirá declarar las clases encontradas en tu biblioteca.

Dim TestClass As Test Set TestClass = New Test MsgBox TestClass.HelloWorld

SIN EMBARGO, si desea utilizar su dll en una máquina cliente diferente, tendrá que usar regasm.exe para registrar el ensamblado (dll) en esa máquina.

Esto se puede hacer por la línea de comando,

regasm.exe

en este caso

regasm.exe TestDll.dll

una vez que haya registrado el ensamblado en la nueva máquina cliente, podrá acceder a ella agregando nuevamente una referencia a su * .tlb

¡Espero que esto ayude!