It's in fact a feature that in most cases tlbimp will convert an interface to a coclass. Specifically if in IDL I have
interface IFirst {
}
interface ISecond {
HRESULT GetFirst( IFirst** );
}
coclass First {
interface IFirst;
}
then tlbimp will see that First is the only class to implement IFirst, so it creates a .NET interface where interface IFirst is replaced with class First
interface ISecond {
First GetFirst(); // co-class returned, not interface
}
which is presumably helpful in some way.
How could this be useful? I mean class First will have the same methods as interface IFirst anyway, so it doesn't add anything, so without that conversion I could just pass interface IFirst everywhere and get exactly the same effect. What's the use of this conversion?