【问题标题】:COM Interoperability and InheritanceCOM 互操作性和继承
【发布时间】:2012-02-11 10:00:22
【问题描述】:

我在编写一个旨在向 COM 公开的 .NET 组件时遇到了一些问题。

要公开的类继承自一个基类,这两个基类的 ComVisible 属性都设置为 true。基类确实没有什么特别之处 - 它包含 2 个属性,我用来帮助抽象一些数据库代码。

我可以注册程序集并输入 lib 就好了。但是,一旦我尝试实例化该类,我就会从被调用者那里得到以下异常:

IDispatch.Invoke() 中的错误:0x80020101

我决定在 CScript.exe 中调试它,我得到了同样的错误。所以我重写了没有基类的类,现在我可以毫无问题地创建实例了。

为了公开从同一命名空间中的另一个 .NET 类继承的 .NET 类,我需要做其他工作吗?

【问题讨论】:

  • 基类是否在同一个DLL中?
  • 如果让父类不可见 COM 会发生什么。
  • 一个令人沮丧的事情是EventViewer中似乎没有任何日志信息;它只是死了。另外,我一开始没有在基类上指定 ComVisible 就尝试了它,这仍然会导致相同的错误(它实际上在 VS2010 调试器中显示为“未知错误”,但我知道基于应用程序调用引发的异常的内容类)

标签: c# .net com com-interop


【解决方案1】:

您不能直接在脚本语言中使用派生接口。脚本引擎仅支持实现单个接口(默认接口)的 coclass。或者换句话说,像 vbscript 或 jscript 这样的脚本语言不是支持多重继承的面向对象语言。一种解决方法是向默认接口添加一个方法,该方法返回对第二个接口的引用。不常用,保持简单是脚本中的样板。

【讨论】:

  • 谢谢 Hans... 这是有道理的,因为不仅在 CScript 中调用失败,而且在调用软件中也失败,因为它使用 VBScript 创建类实例。
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 2011-06-13
  • 2011-11-18
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多