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>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); }
- include <sample.hpp>
Nachdem mit einem entsprechend aufgebauten Make-File eine DLL (SAMPLE.DLL) erzeugt wurde, muss das CLASSIX.INI erweitert werden.