Pregunta

Tengo una biblioteca de clase simple que uso en Excel. Aquí es una simplificación de mi clase ...

using System;
using System.Runtime.InteropServices;

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

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

En Excel 2007 me gustaría crear una macro activado libro y añadir un módulo con el siguiente código:

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

A continuación, en Excel que podría llamar a la función GetSix () y volvería seis. Esto ya no funciona en Excel 2010 de 64 bits. Recibo un error de tiempo de ejecución '429':. El componente ActiveX no puede crear el objeto

He intentado cambiar el objetivo de la plataforma x64 en lugar de cualquiera de las CPU pero entonces mi código no se compilará a menos que yo no se el Registro de interoperabilidad COM opción, si lo hace lo hace por lo que mi macro permiten libro no se puede ver ya que es SimpleLibrary.dll ya no registrandose.

Alguna idea de cómo puedo usar mi biblioteca con Excel 2010 de 64 bits?

¿Fue útil?

Solución

No se han descrito en detalle cómo su creado su .NET montaje. Sin embargo, hay un cierto número de pasos necesarios para exponer el conjunto a COM:

  • Agregue los siguientes atributos a su código:

    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;
            }
        }
    }        
    
  • Su montaje debe ser firmado ( Proyecto -> Propiedades ... -> Acceso , cree un archivo de clave y marca la casilla para firmar el ensamblado

  • es necesario el siguiente comando para registrar el ensamblado (todos en una línea):

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

    Esto crea un archivo de biblioteca de tipos .tlb que tendrá que referencia de su proyecto de VBA ( Herramientas -> Referencias -> Examinar ... en el editor de VBA)

  • Ajuste el código VBA:

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

Usted encontrará los pasos que se describen con más detalle en este artículo sobre la base de datos de soporte de Microsoft:

  

Cómo llamar a un Visual Basic .NET o Visual Basic 2005 ensamblaje de Visual Basic 6.0

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