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


Anmelden zum Antworten