The OLE/Component Object Model (COM) is designed to allow clients to communicate transparently with objects, regardless of whether those objects are running within the same process, on the same machine, or on a different machine. From a client's point of view, all objects are accessed through interface pointers. OLE/COM does not specify the component's structure; only its interaction, relegating concerns about the internal structure of a component to programming languages and development environments. Generally, programming environments do not have uniform standards for working with objects outside of their immediate application. OLE/COM, through language-independent interfaces, picks up where programming languages leave off to provide network-wide interoperability.
The OLE/COM components can perform cross-process communication within the same machine. To support communication between objects across different machines, components such as a global name space, global registry, and object store must be developed. To support this initiative, Microsoft will be developing and providing distributed COM (DCOM) in the future containing these features.
For more information on OLE/COM and custom interfaces, see the "COM and ActiveX Object Services" section of the Microsoft Platform SDK.