【发布时间】:2011-02-13 00:59:42
【问题描述】:
我有一个在 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(),它会返回 6。这不再适用于 Excel 2010 64 位。我收到运行时错误“429”:ActiveX 组件无法创建对象。
我尝试将平台目标更改为 x64 而不是 Any CPU,但除非我取消选中 Register for COM interop 选项,否则我的代码将无法编译,这样做会导致我的宏启用工作簿无法看到 SimpleLibrary.dll 原样不再注册。
任何想法如何将我的库与 Excel 2010 64 位一起使用?
【问题讨论】:
-
你的代码中没有原生依赖?您应该尝试解决您的代码无法编译为 x64 的问题。你到底得到了什么错误?
-
您确实使用了 64 位版本的 regasm?它是否成功注册了程序集,即没有错误消息并且 HKCR 下的条目被创建?
-
附注:即使有 64 位版本的 Office,Microsoft 还是建议使用 32 位版本,除非您需要大于 2gb 的 Excel 工作簿。 technet.microsoft.com/en-us/library/ee681792(office.14).aspx
-
我注册了 C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe。它注册得很好,但是当我在 VBA 中使用引用的程序集时,我得到“运行时错误:自动化错误。系统找不到指定的文件。”我使用了 ProcMon,它看起来在注册表中找不到路径。
-
Excel 试图访问哪个路径?您确定 Excel 确实作为 64 位应用程序运行(检查任务管理器或 Excel 的关于框)?否则我会尝试检查是否由于某种原因注册表重定向可能是一个问题:msdn.microsoft.com/en-gb/library/aa384232%28VS.85%29.aspx
标签: c# .net vba excel-2010