The Automation (IDispatch) interface allows a client application to find out what properties and methods are supported by an object at run-time, i.e. implements the concept of RTTI.
Then, the client can execute the function with Invoke provided by the IDispatch interface, a form of late-binding.
This sort of capability was also supported by Dynamic Data Exchange (DDE), which never became popular due to being too low-level.
That way, clients supporting VTABLE-based invocation can use the custom interface instead of the dispatch counterpart.
Each property and method implemented by an object that supports the IDispatch interface has what is called a Dispatch ID, which is often abbreviated DISPID.