Pregunta

Tengo un complemento de Excel en el que agrego tantos módulos de clase que ahora resulta muy voluminoso.Quiero convertirlo en una biblioteca de tipos o un paquete COM para poder reutilizarlo para las otras aplicaciones de la suite MS Office.

Porté el complemento a Visual Studio como un proyecto de biblioteca de clases, pero Excel Automation no reconoce las clases en el archivo .dll compilado.Intuitivamente creo que necesitaría un manifiesto, una interfaz o algo así en mi código.

¿Qué necesito saber para exponer los métodos y propiedades de una clase para su uso en OLE Automation?

¿Fue útil?

Solución

Supongo que, dado que usó la frase manifiesto, está ensamblando esta DLL usando una plataforma de desarrollo .net VS2003, VS2005 o VS2008 en comparación con VS 6.0.

Este enlace proporciona un conjunto detallado de pasos necesarios para registrar un ensamblado .NET para su uso como componente COM.

Lo único que el artículo no menciona y que hago habitualmente es crear mis propios GUID.Utilice el elemento Crear GUID en el menú Herramientas y luego insértelos encima de las clases, interfaces y enumeraciones que desea exponer para COM.

[Guid("3838ADC1-E901-4003-BD0C-A889A7CF25A1")]
public interface IMyCOMClass  {
    void MyMethod(); 
}

[Guid("476BDEB6-B933-4ed5-8B86-7D9330A59356"),
ClassInterface(ClassInterfaceType.None)]
public class MyCOMClass : IMyCOMClass {
    public void MyMethod() { 
        //implementation here
    }
}

Lo segundo que hago es usar una interfaz separada para la parte COM implementada por la clase.El razonamiento para hacer esto tiene que ver con la fragilidad de COM cuando cambia la interfaz, piense en DLL Hell.

Espero que esto ayude, Bill.

Otros consejos

(Suponiendo que sea un proyecto .NET)

Además de tener que agregar los Guids a sus interfaces y clases, también necesita marcarlos con el atributo ComVisible (a menos que haya marcado todo el ensamblaje con él).Además, debe utilizar tlbexp.exe para exportar los metadatos como una biblioteca de tipos COM para hacer referencia a ellos en clientes no administrados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top