An ActiveX control is really just another term for OLE object or more specifically, COM object. In other words, a control, at the very least, is some COM object that supports the IUnknown interface and is also self-registering. Through IUnknown::QueryInterface a container can manage the lifetime of the control as well as dynamically discover the full extent of a control's functionality based on the available interfaces. This allows a control to implement as little functionality as it needs to, instead of supporting a large number of interfaces that actually don't do anything. In short, this minimal requirement for nothing more than IUnknown allows any control to be as lightweight as it can.
In short, other than IUnknown and self-registration, there are no other requirements for a control. There are, however, conventions that should be followed about what the support of an interface means in terms of functionality provided to the container by the control. This section then describes what it means for a control to actually support an interface, as well as methods, properties, and events that a control should provide as a baseline if it has occasion to support methods, properties, and events.
For more information, see the following topics:
- Self Registration for Controls
- What Support for an Interface Means
- Persistence Interfaces
- Optional Methods in Control Interfaces
- Class Factory Options
- Exposing Properties through IDispatch
- Exposing Methods through IDispatch
- Events in Controls
- Property Pages
- Ambient Properties for Controls
- Using the Container's Functionality