c# - 在 VB6 应用程序中,C# dll 的 CreateObject 仅在 IDE 中失败并显示 "ActiveX component can' t create object

标签 c# vb6 com-interop regasm

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

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 后注册表中应该有什么。我所有的设置都在 WOW6432NODE 键中

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\WOW6432Node\CLSID\{2942ED53-BBC4-311D-9840-1FE610885592}

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

最佳答案

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

最后,我决定尝试使用该参数并引用类型库,然后 VB6 IDE 调试就成功了。

奇怪部分(对我来说有好处)是,然后我删除了引用,VB6 IDE 继续工作。所以不知何故,在 VB6 中添加引用做了一些“事情”,即使在我删除了引用之后,它在 IDE 中运行时也能正常工作。

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

关于c# - 在 VB6 应用程序中,C# dll 的 CreateObject 仅在 IDE 中失败并显示 "ActiveX component can' t create object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41865556/

相关文章:

javascript - 如何查找已使用 WatiN 打开的 JavaScript 警报

VB6 局部变量作用域

c# - 我可以将 .NET 5 COM 互操作对象与 VB6 连接吗?

c# - 使用互操作在 Excel 工作簿中写入长文本会引发错误?

c# - 并非所有代码路径都返回一个值( boolean 值)

c# - linq 另一个列表的有序子集

c# - 值不能为空;参数名称 'Source'

windows - SEEK_FAILURE 如果文件超过 4.1 GB,SetFilePointer 失败怎么办

c++ - 破译 MSDN C++ API 调用和结构以及从 VB6 调用

c# - HandleRef 和 GCHandle 有什么区别?