Excel 2010 de 64 bits no puede crear el objeto .NET
-
02-10-2019 - |
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?
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