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. |