# Automation in PxPlus - Appendix

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.