使用 vb6 中的 .NET dll 会出现运行时错误 430 类不支持自动化

发布于 2024-12-28 13:49:19 字数 421 浏览 0 评论 0原文

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

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

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

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

更新:我认为它在这里爆炸了,

Set  get_datalist = New ADODB.Recordset

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

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

I have A VB6 application which I have made some changes to. This references a dll created in .NET 2 which I also changed. When I changed the dll, I built it and overwrote the dll in the VB project.

Now when I start the VB6 exe I get the following error:

Run-time error 430. Class does not support automation or does not support expected interface

Any help in how I debug or deal with this would be great thanks.

UPDATE: I think it's bombing out here

Set  get_datalist = New ADODB.Recordset

I think it may be the MDAC stuff, as I built the app on a Win 7 machine and I am trying to run on windows xp.

SOLVED: I ended up building the project on an XP machine, thanks for the help!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

幼儿园老大 2025-01-04 13:49:20

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

  1. 打开 OLE View
  2. Goto File->View Typelib... 从 .Net 对象中选择旧版本的 .tlb 文件。
  3. 将 IDL 文件另存为文本
  4. 重复 2 & 3 对于新版本的.tlb 文件
  5. 使用文件比较工具比较两个.idl 文件。

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

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

To see what changes have been made in the .Net dll, you can use OLE View to inspect the typelibrary. Do like this:

  1. Open OLE View
  2. Goto File->View Typelib.... Choose the old version of the .tlb file from your .Net object.
  3. Save the IDL file as text
  4. Repeat 2 & 3 for the new version of the .tlb file
  5. Use a file comparison tool to compare the two .idl files.

What this will reveal is differences in interface names, GUIDs etc.

If you want to keep your OLE interface backwards compatible, you need to insure that the new version uses the same GUID for interface ID, and that the function use the same parameters and return values.

只为守护你 2025-01-04 13:49:20

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

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

该消息告诉您,您的程序是为与更新版本的 ADO 一起使用而构建的,XP 计算机仍在运行旧版本。核心知识库文章位于此处

I think it may be the MDAC stuff, as I built the app on a Win 7 machine

It no doubt is, note how it bombs on ADODB.Recordset and nothing related to your .NET code. There was a long overdue update released for ADO in Windows 7 SP1. It solves a nagging problem with type library compatibility for 64-bit code. This was however a breaking change and required new guids for the ADO interface types.

Which is what the message is telling you, your program was built to work with the updated version of ADO, the XP machine is still running the old version. The core KB article is here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文