【问题标题】:using .NET dll from vb6 gives Run-time error 430 Class does not support automation使用 vb6 中的 .NET dll 会产生运行时错误 430 类不支持自动化
【发布时间】:2012-01-25 22:54:06
【问题描述】:

我有一个 VB6 应用程序,我对其进行了一些更改。这引用了在 .NET 2 中创建的 dll,我也对其进行了更改。当我更改 dll 时,我构建了它并覆盖了 VB 项目中的 dll。

现在当我启动 VB6 exe 时出现以下错误:

运行时错误 430。类不支持自动化或不支持预期的接口

任何有关我如何调试或处理此问题的帮助都将非常感谢。

更新:我认为这里正在爆炸

Set  get_datalist = New ADODB.Recordset

我认为这可能是 MDAC 的东西,因为我在 Win 7 机器上构建了应用程序,并且我试图在 windows xp 上运行。

已解决:我最终在 XP 机器上构建项目,感谢您的帮助!

【问题讨论】:

标签: .net vb6


【解决方案1】:

要查看在 .Net dll 中进行了哪些更改,您可以使用 OLE 视图检查类型库。这样做:

  1. 打开 OLE 视图
  2. 转到文件->查看 Typelib.... 从您的 .Net 对象中选择旧版本的 .tlb 文件。
  3. 将 IDL 文件另存为文本
  4. 为新版本的 .tlb 文件重复 2 和 3
  5. 使用文件比较工具比较两个 .idl 文件。

这将揭示接口名称、GUID 等方面的差异。

如果您想保持您的 OLE 接口向后兼容,您需要确保新版本使用相同的 GUID 作为接口 ID,并且该函数使用相同的参数和返回值。

【讨论】:

  • GUID 没有改变或有接口。我开始认为它是别的东西,项目中有大约 15 个其他 dll。
  • 你的意思是你只在运行你编译的.exe时得到错误,而不是在VB6的调试模式下?还是在调试模式下到达代码的第一行之前出现错误?
  • 在调试中运行良好,运行编译的exe时出现错误。
【解决方案2】:

我认为这可能是 MDAC 的东西,因为我在 Win 7 机器上构建了应用程序

毫无疑问,请注意它是如何在 ADODB.Recordset 上爆炸的,并且与您的 .NET 代码无关。在 Windows 7 SP1 中为 ADO 发布了一个早该更新的更新。它解决了 64 位代码的类型库兼容性问题。然而,这是一个重大更改,需要 ADO 接口类型的新 guid。

消息告诉你的是,你的程序是为使用更新版本的 ADO 而构建的,XP 机器仍在运行旧版本。核心知识库文章is here

【讨论】:

    猜你喜欢
    • 2022-08-09
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2016-08-01
    • 2022-06-30
    • 1970-01-01
    相关资源
    最近更新 更多