Excel 2010 64位无法创建.NET对象
-
02-10-2019 - |
题
我有一个简单的类库,它在Excel中使用。这是我班级的简化...
using System;
using System.Runtime.InteropServices;
namespace SimpleLibrary
{
[ComVisible(true)]
public interface ISixGenerator
{
int Six();
}
public class SixGenerator : ISixGenerator
{
public int Six()
{
return 6;
}
}
}
在Excel 2007中,我将创建一个启用宏观的工作簿,并添加一个具有以下代码的模块:
Public Function GetSix()
Dim lib As SimpleLibrary.SixGenerator
lib = New SimpleLibrary.SixGenerator
Six = lib.Six
End Function
然后,在Excel中,我可以调用函数getsix(),它将返回六个。这不再适用于Excel 2010 64位。我得到一个运行时错误'429':ActiveX组件无法创建对象。
我尝试将平台目标更改为X64而不是任何CPU,但是除非我取消选中登录com Interop选项的寄存器,否则我的代码不会编译,这样做使我的宏启用工作簿无法看到SimpleLibrary.dll,因为它不再是登录的。 。
有什么想法如何将我的图书馆与Excel 2010 64位一起使用?
解决方案
您尚未详细描述如何创建.NET组件。但是,将大会暴露于COM需要一定数量的步骤:
将以下属性添加到您的代码:
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; } } }
您的议会必须签署(项目 - >属性...->签名, ,创建一个强键文件,然后选中框以签名。
必须以下命令注册组件(全部一行):
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe SimpleLibrary.dll /tlb SimpleLibrary.tlb /codebase
这将创建一个.TLB类型库文件,您必须从VBA项目中引用该文件(工具 - >参考 - >浏览... 在您的VBA编辑中)
调整VBA代码:
Public Function GetSix() Dim lib As SimpleLibrary.SixGenerator Set lib = New SimpleLibrary.SixGenerator GetSix = lib.Six End Function
您将在本文中更详细地找到有关Microsoft支持数据库的步骤:
不隶属于 StackOverflow