在VB6应用程序中,c#dll的CreateObject失败,并显示“0”;ActiveX组件可以';“创建对象”;仅在IDE中

在VB6应用程序中,c#dll的CreateObject失败,并显示“0”;ActiveX组件可以';“创建对象”;仅在IDE中,c#,vb6,com-interop,regasm,C#,Vb6,Com Interop,Regasm,我需要在VB6中使用C#汇编。我已经在以前的机器/操作系统上使用过这个功能,但是在我当前的Windows 10机器上,在VB6/VS6 IDE中调试时,我无法让它工作。无论何时,我都会说: Set interop=CreateObject(“BTR.Core.interop.Activator”) 我收到“ActiveX组件无法创建对象”错误 如果我运行编译过的VB6应用程序,一切正常。因此,在VB6/VS6 IDE的某个地方,一定存在权限问题 我发现其他帖子提到要确保使用32位版本的regas

我需要在VB6中使用C#汇编。我已经在以前的机器/操作系统上使用过这个功能,但是在我当前的Windows 10机器上,在VB6/VS6 IDE中调试时,我无法让它工作。无论何时,我都会说:

Set interop=CreateObject(“BTR.Core.interop.Activator”)

我收到“ActiveX组件无法创建对象”错误

如果我运行编译过的VB6应用程序,一切正常。因此,在VB6/VS6 IDE的某个地方,一定存在权限问题

我发现其他帖子提到要确保使用32位版本的regasm,我尝试了
regasm
C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe
,但都没有用

由于它在我运行编译后的VB6应用程序时工作(而且应用程序和VB6应用程序都在以前的机器上工作),我认为这证明了将我的C#dll公开给COM的所有设置都是正确的,但如果有人认为这是相关的,我很乐意挖掘更多细节

我看到的唯一可疑的事情是,这篇文章()讨论了在运行regasm之后应该在注册表中保存什么。我的所有设置都位于WOW6432节点键中

HKEY\U LOCAL\U MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{2942ED53-BBC4-311D-9840-1FE610885592}


因此,不确定是否存在某种32/64位冲突或什么。非常感谢您的建议。

好吧,我找到了一个解决方案。我不确定这是不是对的。但我发现了其他类似于这个问题的帖子,其中谈到使用
/tlb
参数运行regasm来创建一个类型库,然后在VB6中引用它。当我将应用程序部署到另一台机器上时,我不想有那个引用,所以我忽略了这个建议

最后,我决定尝试使用该参数并引用类型库,然后VB6 IDE调试开始工作

但奇怪的是,我删除了引用,VB6IDE继续工作。因此,在VB6中添加引用在IDE中运行时,即使在我删除了引用之后,它仍然可以正常工作


希望这对在新Windows操作系统上维护VB6应用程序有帮助。

您确定VBP文件中的COM引用与编译应用程序时相同吗?如果VBP中的引用与.NET代码/程序集中指定的接口不匹配,则可能导致此错误。我有/没有引用,我正在执行后期绑定CreateObject。这就是为什么我对开始添加tlb引用持怀疑态度。奇怪。问题可能是TLB没有正确注册。后期绑定依赖于此,阿福。君主制步骤可能已经解决了这一问题。有时VB6 IDE本身似乎也会自动注册DLL。所以这两件事中的一件肯定已经完成了。它应该是VB6…我做了regasm,直到我创建了TLB并在VB6中添加了引用,它才起作用。