Problem mit Basisklassenzeiger



  • Wow. Du hast ein echt übles Design.



  • Wenn du innerhalb von MACWindow nur Ereignisse feststellen und die dann weiterreichen willst, dann kannst du das so machen, daß bei MACWindow MACMessageSysteme "registriert" werden und die Ereignisse dann an die registrieren Systeme deligiert werden

    Bitte das ganze mal für doofe , das ist ja vielleicht ein Brocken....



  • man könnte des ziemlich komplex machen, aber sehr einfach ungefähr so:

    class MACWindow ... //nicht mehr von MACMessageSysten erben
    {
      private:
        MACMessageSystem*msgSys_; //alle Ereignisse daran senden
      ...
      public:
        MACWindow(MACMessageSystem*msgSys); //einfach in msgSys_ kopieren
      ...
    
    };
    

    Wenn MyApplication jetzt von MACMessageSystem abgeleitet ist, dann kannst du den Konstruktor von MACWindow mit einem Objekt von MyApplication aufrufen (innerhalb von MyApplication wär das dann der this-Zeiger)



  • also um es mal zu abstrahieren.....

    du schlägst vor in MACWindow einen Member zu definieren, der einen zeiger auf MACMessageSystem definiert. Das habe ich doch richtig verstanden oder?!

    ...was der Zeiger im Konstruktor soll habe ich jetzt nicht so ganz verstanden (also vom sinn her).

    Hast du vielleicht nen beispiel???



  • du schlägst vor in MACWindow einen Member zu definieren, der einen zeiger auf MACMessageSystem definiert. Das habe ich doch richtig verstanden oder?!

    so ungefähr. Du mußt deine Events in WndProc (schätz ich mal) dann eben an das von diesem Zeiger referenzierte Objekt verschicken

    msgSys_->Event_Bla();
    //anstatt
    EventBla(); //bzw. this->EventBla();
    

    Wie willst du es denn in MyApplication haben? Soll es ein Hauptfenster geben, das für die Events dann die Funktionen von MyApplication nutzen soll?

    Dann kannst du in MyApplication halt einfach einen Member MACWindow mainWin_ reintun und dessen Konstruktor im Konstruktor von MyApplication dann mit Parameter this aufrufen.

    Versuchs doch einfach mal, is eigentlich total einfach diese Lösung. Eigentlich nur eine Vererbung aufgelöst.



  • hmmm versuch ich gerne wenn du lust hast kannst mich ja mal anschreiben (ICQ :157413201).

    Ich muss zugeben dass es mir noch nicht völlig klar ist.... werd grad nochmal drüber schauen....

    Gruß Para



  • hmmmm also noch ne Frage:

    Ich lasse meinen Zeiger in einer dll (com objekt) auf die klasse setzten habe dafür dolgende Funktion:

    extern "C" __declspec (dllexport) void MACExport (HINSTANCE hdll, MACWidget** ptr_base)
    {
    	*ptr_base = new MACWindow ();   
    }
    

    Muss ich jetzt um das zu Realisieren einen 3. Parameter als einen MACMessageSystem** hinzufügen und den zeiger als Parameter an MACWindow übergebenen oder?!

    Gruß Para



  • hallo?!



  • so ich habe das jetzt soweit angepasst, das meine dllfunktion die Sache mit dem Konstruktor nimmt:

    class MyApplication : public MACMessageSystem
    {
    	public:
    		MyApplication (void);
    		void CreateWindowDevice (void);
    		void CreateDisplayDevice (void);
    		void CreateApplicationWindow (void);
    
    	private:
    		RENDERCREATE r;	
    		MACWidget* bla;	
    		MACRenderer* ptr_render;
    		MACRenderDevice* ptr_render_device;
    		MACGUIHandler* gui;	  
    		LOG* mainlog;	
    	protected:
    };
    
    /* hier steht was - poste ich jetzt net*/
    
    void MyApplication::CreateWindowDevice (void)
    {
    	gui->CreateDevice ("windows", (MACMessageSystem*) this);
    	bla = gui->getDevice ();
    
    }
    

    Die CreateDevice Methode ruft dann die Exportmethode auf die ich ebend gepostet hatte und die Initialisiert das MACWindow Objekt (natürlich jetzt mit MACMessageSystem* als Parameter. Nur was habe ich jetzt davon?!?!

    Ich stecke nun wieder fest....



  • Implementiere/Überschreibe doch mal die Event-Funktionen von MACWindowSystem in MyApplication oder aus welchem Grund hast du das sonst davon abgeleitet?


Anmelden zum Antworten