Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Regasm不工作/ActiveX组件可以';不创建对象_C#_Vba_Dll_Activex_Regasm - Fatal编程技术网

C# Regasm不工作/ActiveX组件可以';不创建对象

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,如

我在Visual Studio中编写了一个C#.dll,我想从excel VBA调用它。(我用过教程)

在我的开发PC上,我在项目属性中设置了“使COM可见”、“注册COM互操作”和“为程序集签名”的设置,这些设置都可以正常工作。dll由Visual Studio自动注册,我可以在Excel中的VBA窗口>工具>引用中选择并设置它

现在的用例是,我可以在另一台没有安装Visual Studio的PC上使用该dll文件

正如本教程和整个互联网中所述,我的做法是使用命令行工具
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你能把这个写出来作为答案吗?或者,如果之前已经回答过,则标记为重复?