Implementing a Dual Interface
You can implement a dual interface using the IDispatchImpl class, which provides a default implementation of the IDispatch methods in a dual interface. For more information, see Implementing the IDispatch Interface [Automation].
To use this class:
Define your dual interface in a type library.
Derive your class from a specialization of IDispatchImpl (pass information about the interface and type library as the template arguments).
Add an entry (or entries) to the COM map to expose the dual interface through QueryInterface.
Implement the vtable part of the interface in your class.
Ensure that the type library containing the interface definition is available to your objects at run time.
If you have an existing interface, you can use the Implement Interface Wizard to add the necessary base class, COM map entries, and skeleton method implementations to an existing class.
You may need to adjust the generated base class so that the major and minor version numbers of the type library are passed as template arguments to your IDispatchImpl base class. The Implement Interface Wizard doesn't check the type library version number for you.
You can use an IDispatchImpl base class to provide an implementation of a dispinterface just by specifying the appropriate entry in the COM map (using the COM_INTERFACE_ENTRY2 or COM_INTERFACE_ENTRY_IID macro) as long as you have a type library describing a corresponding dual interface. It is quite common to implement the IDispatch interface this way, for example. The ATL Simple Object Wizard and Implement Interface Wizard both assume that you intend to implement IDispatch in this way, so they will add the appropriate entry to the map.