You can use a single IDL file to generate both the proxy stubs and header files for marshaling code, and a type library. You do this by defining an interface outside the library block and then referencing that interface from inside the library block, as shown in this example:
//file: AllKnown.idl
[object, uuid(. . .), <other interface attributes>]
interface IKnown : IUnknown {
import "unknwn.idl";
<declarations, etc. for IKnown interface go here>
};
[<library attributes>]library KnownLibrary {
//reference interface IKnown:
interface IKnown;
//or create a new class:
[<coclass attributes>] coclass KnowMore {
interface IKnown;
};
};
Marshaling OLE Data Types, Additional Files Required To Generate a Type Library