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.