【问题标题】:VB.NET calling COM DLL with call to another COM DLL restults in errorVB.NET 调用 COM DLL 并调用另一个 COM DLL 会导致错误
【发布时间】:2012-04-19 15:29:37
【问题描述】:

我正在 VB.NET 2010 中编写一个 COM DLL(我们称之为 DLL A)。此 DLL 使用预先存在的 DLL (DLL B) 中的函数。当我从 VS2010 中的测试应用程序运行代码时,一切正常。

(测试应用程序)-->(DLL A)-->(DLL B)

现在我在真正的 APP(在 VB6 中)中添加对 DLL A 的引用

(真实应用)--> (DLL A)--> (DLL B)

...我收到此错误

无法将“System.__ComObject”类型的 COM 对象转换为接口类型“Object.class”。此操作失败,因为对具有 IID '{GUID}' 的接口的 COM 组件上的 QueryInterface 调用失败,原因是以下错误:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE))。

DLL A 确实被初始化了,但是一旦我调用一个引用 DLL B 的函数,它就会出错。

帮助!

【问题讨论】:

  • 您使用的是 x86/x64 还是两者都使用?
  • DLL B 也是基于 .NET 还是老式 COM?

标签: vb6 comobject


【解决方案1】:

当您部署 .NET DLL 并希望将其与 COM(VB6) 一起使用时,您需要使用“RegASM”在您的程序集中进行注册。注册 GAC 文件夹以外的文件夹时,您必须包含 /codebase 开关。

使用 /codebase 开关,它必须是强名称程序集。

【讨论】:

  • +1 用于 RegAsm,因为它需要注册。但是,除非您将其放入 GAC(通常作为主互操作程序集),否则您不需要给它一个强名称。如果您将 dll 部署为仅供您的应用程序使用的私有程序集,则使用 RegAsm /codebase 并忽略有关签名的警告。
猜你喜欢
  • 2018-09-13
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
  • 2013-09-08
相关资源
最近更新 更多