2012-02-10 101 views
2

我遇到了一些我正在编写的.NET组件的问题,这些问题旨在暴露给COM。COM互操作性和继承

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

我可以注册程序集并键入lib就好了。然而,当我试图将类实例,我得到以下异常从被叫抛出:

错误IDispatch.Invoke():0x80020101

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

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

+0

基类是否在同一个DLL中? – Stu 2012-02-10 22:01:01

+0

如果使父类不可见,会发生什么情况。 – Chriseyre2000 2012-02-10 22:01:54

+0

有一件令人沮丧的事情是,在EventViewer中似乎没有任何日志信息;它刚刚死亡。另外,我在第一次尝试时没有在基类中指定ComVisible,它仍然导致相同的错误(它实际上在VS2010调试器中显示为“未知错误”,但我知道基于应用程序调用抛出的异常的内容该类) – 2012-02-10 22:17:08

回答

3

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

+0

感谢Hans ......这是有道理的,因为这不仅在CScript中调用失败,而且在调用软件中也失败了,因为它使用VBScript创建类实例。 – 2012-02-11 12:45:29