在 VB6 应用程序中,C# dll 的 CreateObject 仅在 IDE 中失败并显示 "ActiveX component can't create object"
In VB6 application, CreateObject for a c# dll fails with "ActiveX component can't create object" in IDE only
我有需要在 VB6 中使用的 C# 程序集。我已经在以前的 machines/OS 上工作过,但是在我当前的 Windows 10 机器上,在 VB6/VS6 IDE 中调试时我无法让它工作。每当我点击这条线时:
Set interop = CreateObject("BTR.Core.Interop.Activator")
我收到“ActiveX 组件无法创建对象”。错误。
如果我运行编译的VB6应用程序,一切正常。所以这一定是关于 VB6/VS6 IDE.
某处的权限问题
我发现其他 post 提到要确保使用 32 位版本的 regasm,我已经尝试 regasm
和 C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe
都无济于事。
因为它在我 运行 编译的 VB6 应用程序时工作(并且因为应用程序和 VB6 应用程序都在以前的机器上工作),我认为这证明了将我的 C# dll 公开给 COM 的所有设置是正确,但如果有人认为相关,我很乐意挖掘更多细节。
我看到的唯一可疑之处是这个 post (Late binding run-time error in VB6 when creating an object from a .NET assembly) 讨论了在 运行 重燃后注册表中应该有什么。我的所有设置都在
处的 WOW6432NODE 键中
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{2942ED53-BBC4-311D-9840-1FE610885592}
.
所以不确定是否存在某种 32/64 位冲突或什么。任何建议表示赞赏。
好吧,我找到了解决办法。我不确定这是不是正确的。但我发现其他与此问题类似的帖子讨论了使用 /tlb
参数的 运行 regasm 来创建类型库,然后在 VB6 中引用它。当我将应用程序部署到另一台机器时,我不想有那个参考,所以我有点忽略了这个建议。
最后,我决定尝试使用该参数并引用类型库,然后 VB6 IDE 调试成功了。
但是 奇怪的 部分(对我有好处)是,然后我删除了引用并且 VB6 IDE 继续工作。所以不知何故,在 VB6 中添加引用确实 'something' 使其在 IDE 中的 运行 时工作,即使在我删除了引用之后也是如此。
希望这可以帮助其他可能无法在新的 Windows 操作系统上维护 VB6 应用程序的人。
我有需要在 VB6 中使用的 C# 程序集。我已经在以前的 machines/OS 上工作过,但是在我当前的 Windows 10 机器上,在 VB6/VS6 IDE 中调试时我无法让它工作。每当我点击这条线时:
Set interop = CreateObject("BTR.Core.Interop.Activator")
我收到“ActiveX 组件无法创建对象”。错误。
如果我运行编译的VB6应用程序,一切正常。所以这一定是关于 VB6/VS6 IDE.
某处的权限问题我发现其他 post 提到要确保使用 32 位版本的 regasm,我已经尝试 regasm
和 C:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe
都无济于事。
因为它在我 运行 编译的 VB6 应用程序时工作(并且因为应用程序和 VB6 应用程序都在以前的机器上工作),我认为这证明了将我的 C# dll 公开给 COM 的所有设置是正确,但如果有人认为相关,我很乐意挖掘更多细节。
我看到的唯一可疑之处是这个 post (Late binding run-time error in VB6 when creating an object from a .NET assembly) 讨论了在 运行 重燃后注册表中应该有什么。我的所有设置都在
处的 WOW6432NODE 键中HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{2942ED53-BBC4-311D-9840-1FE610885592}
.
所以不确定是否存在某种 32/64 位冲突或什么。任何建议表示赞赏。
好吧,我找到了解决办法。我不确定这是不是正确的。但我发现其他与此问题类似的帖子讨论了使用 /tlb
参数的 运行 regasm 来创建类型库,然后在 VB6 中引用它。当我将应用程序部署到另一台机器时,我不想有那个参考,所以我有点忽略了这个建议。
最后,我决定尝试使用该参数并引用类型库,然后 VB6 IDE 调试成功了。
但是 奇怪的 部分(对我有好处)是,然后我删除了引用并且 VB6 IDE 继续工作。所以不知何故,在 VB6 中添加引用确实 'something' 使其在 IDE 中的 运行 时工作,即使在我删除了引用之后也是如此。
希望这可以帮助其他可能无法在新的 Windows 操作系统上维护 VB6 应用程序的人。