1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
/*
This program demonstrates an SCF object with an embedded interface
made using multiple inheritance. Also it demonstrates that there
are no special tricks for using a SCF class either with static linking
(linked into executable) or with dynamic linking. For this class is
always statically linked into the executable and then is registered
at run time using scfRegisterClass()
*/
#include "cssysdef.h"
#include "ifrog.h"
#include "iname.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
class csFrog : public iFrog, public iName
{
char *Name;
public:
SCF_DECLARE_IBASE;
csFrog (iBase *iParent);
virtual ~csFrog ();
virtual void Jump ();
virtual void Croak (char *iWhat);
virtual char *GetName ();
virtual void SetName (char *iName);
};
//--------------- implementation ----------------
SCF_IMPLEMENT_IBASE (csFrog)
SCF_IMPLEMENTS_INTERFACE (iFrog)
SCF_IMPLEMENTS_INTERFACE (iName)
SCF_IMPLEMENT_IBASE_END
csFrog::csFrog (iBase *iParent)
{
SCF_CONSTRUCT_IBASE (iParent);
Name = NULL;
}
csFrog::~csFrog ()
{
printf ("Frog %s dies ...\n", Name);
if (Name)
free (Name);
}
void csFrog::Jump ()
{
printf ("Frog %s jumps\n", Name);
}
void csFrog::Croak (char *iWhat)
{
printf ("%s: Croak, Croa-a-a-ak, %s!\n", Name, iWhat);
}
char *csFrog::GetName ()
{
return Name;
}
void csFrog::SetName (char *iName)
{
if (Name)
free (Name);
Name = strdup (iName);
}
// ... and now export all classes
SCF_IMPLEMENT_FACTORY (csFrog)
SCF_EXPORT_CLASS_TABLE (Frog)
SCF_EXPORT_CLASS (csFrog, "test.frog", "A Frog that croaks")
SCF_EXPORT_CLASS_TABLE_END
|