2017-01-26 50 views
3

我有需要在VB6使用C#组件。我曾在以前的机器/操作系统上工作过,但在我当前的Windows 10机器上,在VB6/VS6 IDE中调试时无法使其工作。每当我打了一行:在VB6应用,为的CreateObject一个C#DLL失败,并在IDE“ActiveX组件不能创建对象”仅

Set interop = CreateObject("BTR.Core.Interop.Activator")

我收到“ActiveX组件不能创建对象。”错误。

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

我发现其他职位提到,以确保使用32位版本的regasm,我已经试过regasmC:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe无济于事。因为它在我运行编译后的VB6应用程序(以及应用程序和VB6应用程序都在以前的机器上工作)时起作用,所以我认为证明将我的C#dll公开给COM的所有设置都是正确的,如果有人认为它是中肯的,我很乐意详细地挖掘它。

只见

只有可疑的事情是,这个帖子(Late binding run-time error in VB6 when creating an object from a .NET assembly)谈论应该是什么在注册表中运行regasm后。我的所有设置都是在

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{2942ED53-BBC4-311D-9840-1FE610885592}的WOW6432NODE关键。

所以不知道是否有某种32/64位冲突或什么的。任何建议表示赞赏。

+0

您确定VBP文件中的COM引用与编译应用程序时的引用完全相同吗?如果VBP中的引用与.NET代码/程序集中指定的接口不匹配,则可能导致此错误。 – DaveInCaz

+0

我有/没有参考,我正在做晚绑定的CreateObject。这就是为什么我对试图添加tlb参考开始怀疑。奇怪的。 – Terry

回答

3

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

最后,我决定尝试使用PARAM和引用类型库,然后VB6 IDE调试工作。

奇怪部分(对我很好)是,然后我删除了参考和VB6 IDE继续工作。因此,不管怎样,在VB6中添加引用时,即使在删除了引用后,也仍然能够在IDE中运行时发挥作用。

希望这有助于任何人都可能被卡住维持在新的Windows操作系统VB6应用。

+0

问题可能是TLB未正确注册。后期绑定依赖于此,AFAIK。 regasm步骤可能已经解决了这个问题。另外,有时VB6 IDE本身会自动注册DLL。所以,这两件事中的一件必须做到这一点。 – DaveInCaz

+0

它本来是VB6的......我确实重新设计了它,直到我创建了TLB并在VB6中添加为参考时才开始工作。 – Terry

相关问题