Description of Polymorphic DLLs.
Dynamically load libraries during program execution.
These interfaces are used by programs that need to load libraries at run-time, that have a common interface, but different concrete behaviour. Because of this relationship between interface and behaviour, such libraries are called polymorphic DLLs.
Many parts of the system use polymorphic DLLs. Communications components, such as Sockets and Messaging, use architectures in which particular communications protocols are provided as polymorphic DLLs, and are loaded as needed. UI application programs are also polymorphic DLLs that are loaded when the user starts the program.
The API has three key concepts: polymorphic DLL, polymorphic DLL handle, and polymorphic DLL function pointer.
A program that uses a type of polymorphic DLLs defines their interface in terms of a single abstract class whose functions are declared as pure virtual. Each type of polymorphic DLL is given a unique identifier (UID).
A particular concrete DLL:
The polymorphic DLL handle allows a program to load and close a particular polymorphic DLL. It also allows the caller to obtain pointers to functions exported by the DLL. The system can check that a polymorphic DLL is of the correct type by checking the type UID value.
The polymorphic DLL handle interface is provided by RLibrary.
A wildcard file system search for polymorphic DLLs can be done through TFindLibrary.
An exported function is called through a pointer to function obtained through a polymorphic DLL handle.
The polymorphic DLL function pointer type is provided by the TLibraryFunction typedef. The caller casts the pointer to the real type of the exported function before using it.