Domanda

Ho un componente aggiuntivo di Excel che aggiungo così tanti moduli di classe che ora è molto voluminoso. Voglio convertirlo in una libreria dei tipi o in un pacchetto COM in modo da poterlo riutilizzare per le altre app nella suite MS Office.

Ho portato il componente aggiuntivo in Visual Studio come progetto di libreria di classi ma Excel Automation non riconosce le classi nel file DLL compilato. Intuitivamente penso che avrei bisogno di un manifest, un'interfaccia o qualcosa del genere nel mio codice.

Cosa devo sapere per esporre i metodi e le proprietà di una classe da utilizzare nell'automazione OLE?

È stato utile?

Soluzione

Presumo da quando hai usato la frase manifest, stai assemblando questa DLL usando una piattaforma di sviluppo .net VS2003, VS2005 o VS2008 rispetto a un VS 6.0

Questo link fornisce una serie dettagliata di passaggi necessari per registrare un assembly .NET per l'uso come componente COM.

L'unica cosa che l'articolo non menziona che faccio abitualmente è creare i miei GUID. Utilizzare la voce Crea GUID nel menu Strumenti, quindi inserirli sopra le classi, le interfacce e gli enum che si desidera esporre per 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
    }
}

La seconda cosa che faccio è usare un'interfaccia separata per la porzione COM implementata dalla classe. Il ragionamento per fare questo ha a che fare con la fragilità di COM quando l'interfaccia cambia, pensa DLL Hell.

Spero che questo aiuti, Bill.

Altri suggerimenti

(Supponendo che sia un progetto .NET)

Oltre a dover aggiungere le Guide alle tue interfacce e classi, devi anche contrassegnarle con l'attributo ComVisible (a meno che tu non abbia contrassegnato l'intero assembly con esso). Inoltre, è necessario utilizzare tlbexp.exe per esportare i metadati come una tipelibrary COM per il riferimento in client non gestiti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top