在VB6应用程序中,c#dll的CreateObject失败,而#34; ActiveX组件无法创建对象"仅在IDE中

时间:2017-01-26 03:38:54

标签: c# vb6 com-interop regasm

我有需要在VB6中使用的C#程序集。我曾经在以前的机器/操作系统上工作,但是在我目前的Windows 10机器上,我无法在VB6 / VS6 IDE中调试它。无论何时,我都会上线:

undefined

我收到一个' ActiveX组件无法创建对象。'错误。

如果我运行已编译的VB6应用程序,一切正常。所以它必须是关于VB6 / VS6 IDE的某个权限问题。

我发现其他帖子提到确保使用32位版本的regasm而且我已经尝试Set interop = CreateObject("BTR.Core.Interop.Activator")regasm都无济于事。

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

我看到的唯一可疑的事情就是这篇文章(Late binding run-time error in VB6 when creating an object from a .NET assembly)讨论了运行regasm后注册表中的内容。我的所有设置都在

的WOW6432NODE键中

C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe

所以不确定是否存在某种32/64位冲突或者是什么。任何建议都表示赞赏。

1 个答案:

答案 0 :(得分:3)

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

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

怪异的部分(对我来说很好)是,然后我删除了引用,VB6 IDE继续工作。所以不知何故,在我删除引用之后,在VB6中添加引用确实可以使它在IDE中运行时有所作为。

希望这可以帮助其他任何可能无法在新的Windows操作系统上维护VB6应用程序的人。