C# Regasm不工作/ActiveX组件可以';不创建对象
我在Visual Studio中编写了一个C#.dll,我想从excel VBA调用它。(我用过教程) 在我的开发PC上,我在项目属性中设置了“使COM可见”、“注册COM互操作”和“为程序集签名”的设置,这些设置都可以正常工作。dll由Visual Studio自动注册,我可以在Excel中的VBA窗口>工具>引用中选择并设置它 现在的用例是,我可以在另一台没有安装Visual Studio的PC上使用该dll文件 正如本教程和整个互联网中所述,我的做法是使用命令行工具C# Regasm不工作/ActiveX组件可以';不创建对象,c#,vba,dll,activex,regasm,C#,Vba,Dll,Activex,Regasm,我在Visual Studio中编写了一个C#.dll,我想从excel VBA调用它。(我用过教程) 在我的开发PC上,我在项目属性中设置了“使COM可见”、“注册COM互操作”和“为程序集签名”的设置,这些设置都可以正常工作。dll由Visual Studio自动注册,我可以在Excel中的VBA窗口>工具>引用中选择并设置它 现在的用例是,我可以在另一台没有安装Visual Studio的PC上使用该dll文件 正如本教程和整个互联网中所述,我的做法是使用命令行工具RegAsm.exe,如
RegAsm.exe
,如果有用的话:我使用了以下文件夹中的工具:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe
)
注册dll的命令是:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\RegAsm.exe D:\Debug\DotNetLibrary.dll /tlb /codebase.
这运行时没有错误,命令行告诉我类型已正确注册,tlb已导出并注册
看起来一切都很顺利,注册表中也有一个条目(Computer\HKEY\u CLASSES\u ROOT\TypeLib)引用了我的dll,但该库在VBA的引用窗口中并不像在另一台PC上那样显示
如果我通过单击参考窗口中的浏览来选择由RegAsm手动生成的tlb,它将被添加到列表中。但是如果我随后启动代码,我会得到一个错误,ActiveX组件无法创建对象
几天以来,我一直在研究这个问题,因此如果有人能帮助我,那就太好了。正如@HansPassant在我的问题下的评论中提到的,简单的解决方案是使用32位版本的regasm(位于C:\Windows\Microsoft.NET\Framework\v4.0.30319中)
这需要完成,因为Microsoft Office产品仍然是32位的。您是否以管理员身份运行regasm?我以管理员身份运行cmd。我猜你是这个意思。你使用64位版本的Regasm.exe。您可能打算使用32位版本,这是Office最常见的版本。@HansPassant非常感谢您!不,它就像一个魔咒!我从未想过使用32位版本。我假设因为我的电脑运行64位windows,所以我需要使用这个版本。@HansPassant你能把这个写出来作为答案吗?或者,如果之前已经回答过,则标记为重复?