【发布时间】:2017-01-26 03:38:53
【问题描述】:
我有需要在 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 的所有设置都是正确的,但我如果有人认为这是相关的,很乐意挖掘更多细节。
我看到的唯一可疑之处是这篇文章 (Late binding run-time error in VB6 when creating an object from a .NET assembly) 谈到了运行 regasm 后注册表中应该包含的内容。我所有的设置都在
的 WOW6432NODE 键中HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{2942ED53-BBC4-311D-9840-1FE610885592}.
所以不确定是否存在某种 32/64 位冲突或什么。任何建议表示赞赏。
【问题讨论】:
-
您确定 VBP 文件中的 COM 引用与编译应用程序时相同吗?如果 VBP 中的引用与 .NET 代码/程序集中指定的接口不匹配,则可能导致此错误。
-
我有/没有参考,我正在做后期绑定 CreateObject。这就是为什么我对尝试添加 tlb 引用持怀疑态度的原因。很奇怪。
标签: c# vb6 com-interop regasm