COM vs. Flat API Function Calls
The table below lists COM solutions to some DLL problems.
| DLL Problem | COM Solution |
|---|---|
| Path dependencies, multiple providers of a service. | Use the registry to map from abstract class identifiers to absolute server locations, as well as mapping between categories and class identifiers. |
| Decentralized definition of identifiers. | Use GUIDs generated by an algorithm that guarantees uniqueness across time and space, eliminating the need for centralized identifier allocation. |
| Specific management APIs for each service category. | Supply a very simple generic and universal management API that accommodates all service categories, called Implementation Location. |
| Sharing instances across process/machine boundaries. | Marshaling of interface pointers, Location Transparency providing the ability to implement a server as an EXE or DLL. |
| Different in-process, local, and remote programming models. | A single model for all types of client-object connections supported through the interface structure, Location Transparency. |
| Lifetime management of servers and objects. | Universal reference counting through the base interface IUnknown that all objects support and from which all other interfaces are derived. |
| Multiple services per server module. | Use CLSID:IID:table_offset to absolutely identify functions instead of module:ordinal. |
| Versioning, as well as interfaces, that are strongly typed at both compile time and run time. | Support the concept of multiple immutable interfaces. |