Let us examine COM as a software component technology. First, COM provides a binary standard via its
- method calling conventions and
- vtables.
For example, a COM client only needs an object's CLSID, interface IDs, and interface specifications.
The client does not need the internal layout of a COM object. Nor does the client have to link to a library to access a COM object.
From the C++ development perspective this means that, besides the object and interface IDs, a client only needs access to a C++ class specification for each interface.
Recall that these specifications contain all
pure virtual functions.
To load and access a specific COM object, a client directly or in-directly obtains the class factory associated with that object.
Using the class factory, instances of the COM object can be created. The client's only access into a COM object is through its interface pointers. The client has no idea of how the COM object is actually implemented.
COM's ability to de-couple client client-side code from server-side implementation internals is an example of how COM supports binary-level
integration of software components.