Domanda

Ho una semplice libreria di classi che uso in Excel. Ecco una semplificazione della mia classe ...

using System;
using System.Runtime.InteropServices;

namespace SimpleLibrary
{
 [ComVisible(true)]
 public interface ISixGenerator
 {
  int Six();
 }

 public class SixGenerator : ISixGenerator
 {
  public int Six() 
  {
   return 6; 
  }
 }
}

In Excel 2007 vorrei creare una macro abilitato cartella di lavoro e aggiungere un modulo con il seguente codice:

Public Function GetSix()
    Dim lib As SimpleLibrary.SixGenerator
    lib = New SimpleLibrary.SixGenerator
    Six = lib.Six
End Function

Poi in Excel ho potuto chiamare la funzione GetSix () e sarebbe tornare a sei. Questo non funziona più in Excel 2010 a 64 bit. Ottengo un errore di run-time '429':. Il componente ActiveX non può creare l'oggetto

Ho provato a cambiare il target piattaforma x64 invece di qualsiasi CPU, ma poi il mio codice non avrei compilare a meno che io incontrollato al Registro per l'interoperabilità COM opzione, così facendo rende così il mio macro abilitare cartella di lavoro non può vedere SimpleLibrary.dll così com'è non è più auto immatricolate.

Tutte le idee come posso usare la mia libreria con Excel 2010 a 64 bit?

È stato utile?

Soluzione

Non hai descritto in dettaglio come il vostro creato il .NET assembly. Tuttavia, ci sono un certo numero di passaggi necessari per esporre l'assemblea a COM:

  • Aggiungere i seguenti attributi al codice:

    using System;
    using System.Runtime.InteropServices;
    
    namespace SimpleLibrary
    {
        [ComVisible(true)]
        [Guid("71F645D0-AA78-4447-BA26-3A2443FDA691")]
        public interface ISixGenerator
        {
            int Six();
        }
    
        [ComVisible(true)]
        [ProgId("SimpleLibrary.SixGenerator")]
        [Guid("8D59E0F6-4AE3-4A6C-A4D9-DFE06EC5A514")]
        [ClassInterface(ClassInterfaceType.AutoDispatch)]
        public class SixGenerator : ISixGenerator
        {
            [DispId(1)]
            public int Six()
            {
                return 6;
            }
        }
    }        
    
  • Il montaggio deve essere firmata ( Progetto -> Proprietà ... -> Accesso , creare un file di chiave forte e selezionare la casella per firmare l'assembly

  • Il seguente comando è necessario registrare il gruppo (tutto in una riga):

    C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe 
                      SimpleLibrary.dll /tlb SimpleLibrary.tlb /codebase
    

    Questo crea un file di libreria tipo tlb che si dovrà riferimento dal progetto VBA ( Strumenti -> Riferimenti -> Sfoglia ... nel vostro editor VBA)

  • Regolare il codice VBA:

    Public Function GetSix()
        Dim lib As SimpleLibrary.SixGenerator
        Set lib = New SimpleLibrary.SixGenerator
        GetSix = lib.Six
    End Function
    

Troverete i passaggi descritti in modo più dettagliato in questo articolo sul database di supporto di Microsoft:

  

Come chiamare un Visual Basic .NET o Visual Basic 2005 assemblaggio da Visual Basic 6.0

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