Say I have a class BaseClass that implements IBaseClass
Then I have an interface IClass that inherits IBaseClass.
Then I have a class named class that implements IClass.
For example:
[ComVisible(true), InterfaceType(ComInterfaceType.IsDual), Guid("XXXXXXX")]
public interface IBaseClass
{
[PreserveSig]
string GetA()
}
[ComVisible(true), InterfaceType(ComInterfaceType.IsDual), Guid("XXXXXXX")]
public interface IClass : IBaseClass
{
[PreserveSig]
string GetB()
}
[ComVisible(true), ClassInterface(ClassInterfaceType.None), Guid("XXXXXXX")]
public class BaseClass : IBaseClass
{
public string GetA() { return "A"; }
}
[ComVisible(true), ClassInterface(ClassInterfaceType.None), Guid("XXXXXXX")]
public class Class : BaseClass, IClass
{
public string GetB() { return "B"; }
}
When exposing to COM, if I make an instance of "Class" it does not allow me to call GetA().
When looking my IDL in the .tlb file, my IClass interface looks like:
[
odl,
uuid(XXXXXXXXXXXXXXXXXXXXX),
version(1.0),
dual,
oleautomation,
]
interface IClass : IDispatch {
[id(0x60020000)]
BSTR GetB();
}
It doesn't even look like IClass derives from IBaseClass!
If I take out where IClass derives from IBaseClass and just add the methods to the interface, it works.
How can I make C# enable this inheritance in COM? I'd rather not re-implement interfaces when I can inherit them.
CRAP: check this link .Net COM Limitation
If someone has an answer to why this is, or a better workaround than copy-paste to my "derived" interface, let me know. If not, I'll mark an answer in a couple days.
See Question&Answers more detail:os