A polymorphic DLL contains an interface defined by a gate function and an abstract class with at least one virtual function.
The polymorphic DLL exports the gate function at ordinal 1, which typically constructs a concrete class derived from the abstract interface. The virtual function is then called, and the functions of the class are available.
Examples of polymorphic DLLs in Symbian OS include ECom plug-ins, device drivers, Front End Processors, and many more.
Each type of interface should specify its own UID, which is used as
uid2
for the polymorphic DLL.
The function responsible for loading a polymorphic DLL should check
that its uid2
corresponds with the expected interface type.
For polymorphic DLLs, the interpretation of uid3
depends
on the interface type. uid3
may not be required by all interfaces.
The build process for a polymorphic DLL produces an import library, but it is not used.
The project file for a polymorphic DLL must specify the correct target type and UIDs:
Specify the TARGETTYPE
line as:
TARGETTYPE dll
This implicitly specifies UID1
correctly. Note that
some types of polymorphic DLLs, have particular support by the build tools, and
have their own different target types. See
Polymorphic DLL targettype summary.
Specify the UID for the DLL in a UID
line:
UID <UID2> <UID3>
The UID2 value is defined by the interface which is being implemented. Some types of polymorphic DLL also require a third UID, but, if so, its meaning is defined by the DLL.
An example of a project file (PolymorphicDLL1.mmp
) for a
polymorphic DLL is given below.
TARGET PolymorphicDLL1.dll
TARGETTYPE dll
UID 0x10004262 0x10004264
SOURCEPATH .
SOURCE PolymorphicDLL1.cpp
USERINCLUDE .
USERINCLUDE ..\UsingDLLs
SYSTEMINCLUDE \Epoc32\include
LIBRARY euser.lib
EXPORTUNFROZEN