Explains how to use a polymorphic interface DLL.
The interface is defined by an abstract API which can be implemented by
a DLL. The following code fragment defines the API in terms of a pure virtual
abstract C++ class; this is an example class called CMessenger
.
class CMessenger : public CBase { public: virtual void ConstructL(CConsoleBase* aConsole, const TDesC& aName)=0; virtual void ShowMessage()=0; private: CConsoleBase* iConsole; HBufC* iName; };
// The UID for Messenger DLLs. // The client imposes this on DLLs which satisfy the protocol. const TInt KMessengerUidValue=0x10004262; const TUid KMessengerUid={KMessengerUidValue};
The purpose of the example is to be able to issue a simple greeting message. Any number of DLLs can be created, each containing a different implementation of the class.
Because the API can be implemented differently in different DLLs, note the following when declaring the class:
The constructor is not
declared; the default C++ constructor is used, and is not exported from the
DLL. Instead, a function is exported from the DLL which constructs an object
of the concrete type using new (ELeave)
semantics.
All functions are pure virtual; a DLL must provide an implementation for all such functions.
All functions are public
since
the published API is all there to be used, there is no need for private
specifications.
It is possible to use polymorphic interface DLLs in a more advanced way that allows some of these rules to be changed.