IDispatch interface is used by scripting languages that support COM but do not support V-Table binding. It is also used by programs that use late binding.
What happens is if you want to use, lets say, the print method of your object you would call your object using the IDispatch Interface.
Call IDispatch::GetIDsOfNames. This function returns a set of DISPIDs in the result that you can then use to call the IDispatch::Invoke method. The first parameter is one of the values from IDispatch::GetIDsOfNames.
In the Invoke method it is basically a big select statement and normally proxies on the data to the actual procedure that you want.