The COM architecture works well for languages such as C++, where the
methods you need to use are known beforehand (i.e., at compile time).
You create an object using the standard COM techniques, then perform
QueryInterface() on the object for a particular
interface. Once you have the interface, you can make calls on its
methods. This architecture does have some drawbacks, notably:
There is support for methods, but no support for properties. In many cases, properties would simplify the object model you are attempting to publish.
It doesn’t work as well when using higher-level languages than C++. There may be no compile-time step involved at all. The language in use may not support using the .IDL or .H files necessary to obtain the definition of these interfaces.
COM defines the
interface specifically to meet the
requirements of these higher-level languages. The
IDispatch interface allows an object to expose an
object model (complete with methods and properties) and allows the
user of the object to determine the methods and properties available
at runtime. This means the methods or properties you need to call can
be determined when you need to call them, rather than requiring them
to be predefined. You should note that the object model exposed using
IDispatch is quite distinct from the
IDispatch interface itself;
IDispatch is a COM interface that allows an
arbitrary object model to be exposed. In other words,
IDispatch is not the object model but ...