Interfaces "Flattened" during COM Export
While researching a question someone asked, I discovered that TLBEXP will "flatten" out your .NET interface hierarchy.
Assume you have a simple .NET interface such as:
public interface IFoo { void Method1_v1(); void Method2_v1(); }
When exported to COM, the interface in OLEVIEW looks something like this (only relevant portions shown here):
interface IFoo : IDispatch { HRESULT Method1_v1(); HRESULT Method2_v1(); };
Later, you want to add more functionality so you define a new interface that inherits from the previous one:
public interface IFoo2 : IFoo { void Method1_v2(); }
When exported to COM, your two interfaces now appear as:
interface IFoo : IDispatch { HRESULT Method1_v1(); HRESULT Method2_v1(); }; interface IFoo2 : IDispatch { HRESULT Method1_v2(); };
You've lost your interface hierarchy. This is a "by design" issue as documented in MSDN:
All exported interfaces extend directly from either IUnknown or IDispatch, regardless of their inheritance hierarchy in managed code.