Quote:
Originally written in "Special Edition Using Visual C++ 5"
COM objects communicate through interfaces, a collection of function names that describe the possible behaviour of a COMD object. To use an interface you get a pointer to it and then call a member function of the interface. All Automation servers and ActiveX controls have an IDispatch interface in addition to any other interfaces that may be specific to what the server or control is for. To call a method of a control, you can use the Invoke() method of the IDispatch interface, passing in the dispid of the method you wish to invoke. (This technique was developed so that methods could be called from Visual Basic and other pointerless languages.)
This means that IDispatch is required for VB (you need to use Dual Interfaces). Otherwise only pointer-capable languages (C++ :D) will be able to use the component. I think one IDispatch interface is enough.