Pergunta

Eu tenho suplemento do Excel que eu adicionar tantos módulos de classe que agora é muito volumoso. Eu quero convertê-lo em uma biblioteca de tipos ou um pacote COM para que eu possa voltar a usá-lo para os outros aplicativos da suíte MS Office.

Eu portado o add-in para o Visual Studio como um projeto de biblioteca de classe, mas não Excel Automation não reconhece as classes no arquivo .dll compilado. Intuitivamente eu acho que eu iria precisar de um manifesto, uma interface ou a algo como isso no meu código.

O que eu preciso saber para expor métodos e propriedades de uma classe para uso em automação OLE?

Foi útil?

Solução

Estou assumindo desde que você usou a frase manifesto, você está montando esta DLL usando um .net VS2003 plataforma de desenvolvimento, VS2005 ou VS2008, em comparação com a VS 6.0

Este ligação fornece um conjunto detalhado de passos necessários para registrar um .NET assembly para uso como componente COM.

A única coisa que o artigo não menciona que eu rotineiramente fazer é criar os meus próprios GUIDs. Use o item Criar GUID no menu Ferramentas, em seguida, inseri-los acima das classes, interfaces e enums você deseja expor 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
    }
}

A segunda coisa que eu faço é usar uma interface separada para a parte COM que é implementado pela classe. O raciocínio para fazer isso tem a ver com o breakability de COM quando as mudanças na interface, pense DLL Hell.

Espero que isso ajude, Bill.

Outras dicas

(assumindo que é um projeto .NET)

Além de ter que adicionar os GUIDs para suas interfaces e classes, você também precisa marcá-los com o atributo ComVisible (a menos que você marcou toda a congregação com ele). Além disso, você precisará usar o Tlbexp.exe para exportar os metadados como um COM TypeLibrary para fazer referência em clientes não gerenciados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top