A run-time object that does not have a visible interface must set the OLEMISC_INVISIBLEATRUNTIME bit in the OLE miscellaneous status flags. This bit is set through the IOleObject interface and appears in the registry entry for the run-time object.
If the run-time object does not have a visual interface, you can eliminate the interfaces required for OLE embedding and in-place activation.
Nonvisual run-time objects need IDispatch to invoke properties and methods; IConnectionPoint and IConnectionPointContainer to handle events; IProvideClassInfo or IProvideDynamicClassInfo for type information; and the same persistence interfaces the design-time object supports.
Optionally, a nonvisual object may support IOleObject for siting.