VB.NET中的问题覆盖方法(错误BC30284)

时间:2009-05-13 10:30:40

标签: vb.net inheritance com

我的基类中有一个可覆盖的子

Project1:
Public Class BaseClass
    Protected Overridable Sub MySub(ByVal Parameter as MyType)
End Class

Project2:
Public Class DerivedClass
    Inherits BaseClass
    Protected Overrides Sub MySub(ByVal Parameter as MyType)
End Class

MyType是来自外部COM库的类型。当我试图在派生类中覆盖它时,我正在

error BC30284: sub 'MySub' cannot be declared 'Overrides' because it does not override a function in a base class

我已经为包含基类和派生类的两个项目添加了必需的COM引用。 知道如何摆脱这个错误吗?我正在使用VS2005和.NET 2.0

编辑:每个其他覆盖工作正常,如果我使用引用的COM类型作为参数,我只会收到错误。如果我将参数更改为对象,则覆盖可以正常工作。

3 个答案:

答案 0 :(得分:4)

您是否考虑或尝试使用TlbImp.exe从COM类型库生成静态DLL,并从两个项目中引用它(而不是使用COM引用)以确保它们指的是完全相同的东西? TlbImp包含在Visual Studio中,但我在安装了Visual Studio Express的系统上找不到它,所以如果你使用express,你可能不得不去寻找它(链接的页面可能有也可能没有你想要的版本)。我怀疑如果每个项目都有自己的COM引用,Visual Studio可能会为每个项目创建一个单独的COM包装器,并且当生成的GUID和诸如此类的东西时,生成的COM包装器可能并不完全一致。因此,通过创建并强制使用单个包装器,您可以将其作为可能的问题消除。

答案 1 :(得分:1)

除了使用TlbImp之外,另一个选择是创建一个单独的项目,在该项目中将MyType封装在.NET类中,并在样本中包含该项目。

所以你最终得到一个中间MyDotNetType,它将构造函数参数Mytype(COM对象)作为只读属性公开。 然后MySub调用,将MyDotNetType作为参数。

亲切的问候

诺尔

答案 2 :(得分:1)

如果您有不同的agruments或数据类型,请检查基类和派生类中Function的签名o任何参数都不匹配。然后你会得到这种类型的错误。简单请检查函数名称,参数名称和数据类型。它对我有用。我希望这个答案会有所帮助。

谢谢, Ramu V