Interface definition

It was stated earlier that an interface definition serves two purposes:

  • defining functions that offer services to clients

  • offering object instantiation functions

Interface definition class

So, an interface definition class is a normal abstract class plus some implemented functions that use ECom to create object instances. The class can have any base class: for example,

  • for CBase -based classes, you can implement the object construction in NewL() and destruction in the destructor

  • for a RHandleBase -based class, the Open() and Close() functions would be the natural place to conceal the implementation instantiation and destruction

The class must always declare a private UID member. This is set on object instantiation and is used by ECom to identify the instance when object destruction occurs.

Interface definition class example

The following shows an example segment of a interface definition class that derives from CActive (i.e. it is an active object).

class CExampleInterfaceDefinition : public CActive
    {
public:
    // Wraps ECom object instantitation
    static CExampleInterfaceDefinition* NewL();
    // Wraps ECom object destruction 
    virtual ~CExampleInterfaceDefinition();
    // Interface service 
    virtual void DoMethodL() = 0;
...
private:
    // Instance identifier key
    TUid iDtor_ID_Key;
    };

The class:

  • Has a pure virtual method: this means that this class must be a base, although a NewL() usually implies that there is no derivation from this class.

  • Does not need a constructor, private or otherwise, because for an abstract base there is no requirement for construction.

  • Has no ConstructL() to accompany the NewL(), construction isn't going to happen in the standard two-phase pattern, but through ECom.