DLL für Device-Bibliothek erstellen
-
Hallo zusammen
Ich mache mich gerade an mein erstes DLL-Projekt und stolpere noch etwas...
Grundsätzlich möchte ich eine Basis-DLL haben, die allgemeine Funktionen bereit stellt. Von dieser DLL möchte ich dann die entsprechenden Devices ableiten.
Mit "normalen" C++ Klassen ist das ganze ja recht einfach, aber wie macht man das mit DLLs? Die komplette Klasse exportieren oder eine riesige Interface-Klasse als Schnittstelle erstellen?
Oder eine Klasse als Factory erstellen? Aber dann kann man ja die realen Devices nicht erben lassen...Die fereinfachte Struktur der Basis-Klasse sieht so aus:
/////////////////////////////////////////////////////////////// /// This class contains all informations about the ident /// structure (Unit version, interface version, article number...) /////////////////////////////////////////////////////////////// class CIdent { private: CModbusMaster& m_roModbusMaster; public: static const uint8_t c__u8ArticleNumberLength = 20; CIdent(CModbusMaster& p_roModbusMaster); ~CIdent(); bool bGetArticleNumber(char* p_pcarticleNumber, const uint8_t p__u8BufferSize); }; /////////////////////////////////////////////////////////////// /// This class contains all informations about the standard /// components on the device. /////////////////////////////////////////////////////////////// class CNumberOfComponents { private: CModbusMaster& m_roModbusMaster; public: CNumberOfComponents(CModbusMaster& p_roModbusMaster); ~CNumberOfComponents(); bool bGetNumberOfInputs(uint8& p_ru8NumberOfInputs); }; /////////////////////////////////////////////////////////////// /// Base Class for any devcies /////////////////////////////////////////////////////////////// class CDevice { private: CModbusMaster& m_roModbusMaster; public: CDevice(CModbusMaster& p_roModbusMaster); ~CDevice(); CIdent m__oBootloader; CIdent m__oMainApplication; CNumberOfComponents m__oNumberOfComponents; };
An die statische Member-Variable c__u8ArticleNumberLength müsste man bei jedem Device ebenfalls heran kommen. Bis und mit CDeivce kann das ja über einen einfachen Include gelöst werden.
Die jeweiligen Geräte würden die Basis-Funktionen "erben":
/////////////////////////////////////////////////////////////// /// Device 1 /////////////////////////////////////////////////////////////// class CDevice1 : public CDevice { private: CModbusMaster& m_roModbusMaster; public: CDevice1(CModbusMaster& p_roModbusMaster); ~CDevice1(); void vFunction1(); void vFunction2(); }; /////////////////////////////////////////////////////////////// /// Device 2 /////////////////////////////////////////////////////////////// class CDevice2 : public CDevice { private: CModbusMaster& m_roModbusMaster; public: CDevice2(CModbusMaster& p_roModbusMaster); ~CDevice2(); void vFunction1(); void vFunction2(); };
Ich hoffe ihr versteht etwa was ich möchte.
Gruss
P51D