我正在尝试构建一个可以使用64位excel 2010从VBA注册和使用的对象库。我正在使用Dev Studio 2008.我认为这是一个64位问题,因为我很确定这在我尝试时有效它与我以前版本的Excel(XP)。我在Assembly Info信息对话框中单击了“Make COM visible”,并在build标签中单击“Register for COM interop”。当我将目标类型设置为x64时,根本无法在引用对话框中看到该库。如果我选择任何CPU,我可以注册它,但当我尝试实例化它时,我得到一个“无法创建Active X对象”错误。
namespace Tester
{
[Guid("D6F88E95-8A27-4ae6-B6DE-0542A0FC7039")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface _Numbers
{
int GetDay();
int GetMonth();
int GetYear();
int DayOfYear();
}
[Guid("13FE32AD-4BF8-495f-AB4D-6C61BD463EA4")]
[ClassInterface(ClassInterfaceType.None)]
[ProgId("Tester.Numbers")]
public class Numbers : _Numbers
{
public Numbers(){}
public int GetDay()
{
return(DateTime.Today.Day);
}
public int GetMonth()
{
return(DateTime.Today.Month);
}
public int GetYear()
{
return(DateTime.Today.Year);
}
public int DayOfYear()
{
return(DateTime.Now.DayOfYear);
}
}
}
答案 0 :(得分:1)
由于Visual Studio是一个32位进程,它将错误地运行32位版本的regasm.exe以注册您的64位程序集。当然,regasm.exe
的那个版本将写入注册表的32位部分,因此无效。
解决问题的一种方法是自己在目标程序集上运行64位版本的regasm.exe
(例如,在构建后的步骤中)。您需要使用/tlb
选项导出其类型库,并且您还需要传递/codebase
选项,因为程序集不在GAC中:
"%SystemRoot%\Microsoft.NET\Framework64\v2.0.50727\regasm.exe"
/tlb /codebase "$(TargetPath)"