Lade...
 

Beispiel

Beispiel

Eine Beispielklasse A soll in die ClassiX®-Architektur eingefügt werden. Wir wollen -

aus welchen Gründen auch immer - die Klasse selbst nicht verändern und führen deshalb

eine Wrapper-Klasse WRAPPER_A ein. Das Header-File SAMPLE.HPP für beide Klassen:

    class A
    { public:
             A(void);
             ~A();
             int Sum(void);

             char *name;
             short x;
             short y;
    };

    class WRAPPER_A : public CX_CLASS, public A
    { public:
              WRAPPER_A(void);
              ~WRAPPER_A();

             // InstantView® Interface
              DDI(WRAPPER_A)
              MDI(WRAPPER_A)
              GENERIC
    };

    const OBJECTID IDX_WRAPPER_A = 20001;

Hier wird auch gleich ein numerischer Identifikator für WRAPPER_A festgelegt.

Hinweis:  ClassiX® kennt nur die Klasse WRAPPER_A!

Wir wollen ein DDI für die Member name, x und y erzeugen und auch Funktion Sum nach

außen zugänglich machen. Die Anweisungen für das Utility CXDGEN stellen wir in File SMPDDI.D zusammen:

    INCLUDE "sample.hpp"

    DDI(WRAPPER_A)
     (name, STRING)
     (x, SHORT)
     (y, SHORT)

    MDI(WRAPPER_A)
    INT Sum(VOID)

    GENERIC(WRAPPER_A)

Die erste Anweisung sorgt dafür, dass das generierte File SMPDDI.CPP

ein Include-Statement für SAMPLE.HPP enthält. Dann werden Data Dictionary und Method Dictionary beschrieben. Die letzte Anweisung korrespondiert mit dem gleichnamigen Makro im Headerfile und erzeugt die static function New(). Source-File SAMPLE.CPP soll die Funktionen der Klassen A und WRAPPER_A enthalten. Außerdem fügen wir an dieser Stelle

auch RegisterClass() ein:

#include <classix.hpp>
  1. include <sample.hpp>
A::A(void) { x = y = 0; } A::~A() { } int A::Sum(void) { return x + y; } WRAPPER_A::WRAPPER_A(void) : CX_CLASS(IDX_WRAPPER_A), A() { } WRAPPER_A::~WRAPPER_A() { } static CXS_FACTORY_ENTRY factoryTable[]   = {      { IDX_WRAPPER_A,          WRAPPER_A::New },      { IDX_NOTHING,     }     }; void EXPORT_ RegisterClasses(void) {  CX_CLASS::objectManager->RegisterClasses(factoryTable); }

Nachdem mit einem entsprechend aufgebauten Make-File eine DLL (SAMPLE.DLL) erzeugt wurde, muss das CLASSIX.INI erweitert werden.