在VB6应用,为的CreateObject一个C#DLL失败,并在IDE“ActiveX组件不能创建对象”仅
我有需要在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,我已经试过regasm
和C:\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位冲突或什么的。任何建议表示赞赏。
嗯,我找到了一个解决方案。我不确定这是否是正确的。但我发现其他类似于这个问题的帖子,讨论了使用/tlb
参数运行regasm来创建类型库,然后在VB6中引用它。当我将应用程序部署到另一台机器时,我不想拥有这个参考,所以我忽略了这些建议。
最后,我决定尝试使用PARAM和引用类型库,然后VB6 IDE调试工作。
但奇怪部分(对我很好)是,然后我删除了参考和VB6 IDE继续工作。因此,不管怎样,在VB6中添加引用时,即使在删除了引用后,也仍然能够在IDE中运行时发挥作用。
希望这有助于任何人都可能被卡住维持在新的Windows操作系统VB6应用。
您确定VBP文件中的COM引用与编译应用程序时的引用完全相同吗?如果VBP中的引用与.NET代码/程序集中指定的接口不匹配,则可能导致此错误。 – DaveInCaz
我有/没有参考,我正在做晚绑定的CreateObject。这就是为什么我对试图添加tlb参考开始怀疑。奇怪的。 – Terry