If the run-time object is visible, it must implement most of the same interfaces as the design-time object. The IOleObject, IOleInPlaceObject, and IOleInPlaceActiveObject interfaces provide the basic features for embedded, in-place active objects.
IConnectionPoint and IConnectionPointContainer are required to support events.
IDispatch is necessary for invoking the object, its properties and methods.
IProvideClassInfo or IProvideDynamicClassInfo (if the visual designer implements it) is required. These interfaces return type information about the object.
In addition, the run-time object must support the same persistence interfaces that the design-time object supports. The persistence interfaces allow the object to be loaded with the appropriate type information and data.
The other interfaces are optional. The run-time object may need to support IQuickActivate; IViewObject, IViewObject2, or IViewObjectEx; or IOleControl.
The property browsing interfaces IPerPropertyBrowsing and ISpecifyPropertyPages aren't needed at run time.