It was stated earlier that an interface definition serves two purposes:
defining functions that offer services to clients
offering object instantiation functions
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.
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.