Klassen exportieren plattformunabhängig (visual studio und gcc)



  • Hallo allerseits, auf der Suche nach Internetforen zum Thema c++ habe ich euch im Netz gefunden. Falls diese Frage ins allgemeine c++ Forum gehört, dann bitte ich um Nachsicht bzw einen Moderator, sie zu verlegen.

    Ich hoffe, dass ihr mir hier meine Frage beantworten könnt.

    Ich möchte ein Projekt erweiterbar mit Plugins gestalten, indem ich unterschiedliche Funktionen über eine genormte Schnittstelle als dynamische Bibliothek einbinde. Insbesondere soll die Schnittstelle auch vom Endbenutzer erweiterbar sein. Um im C++-stil objektorientiert programmieren zu können, möchte ich gerne Tochterklassen einer Basisklasse jeweils in einer dll zur Verfügung stellen, bei Programmbeginn von jeder dieser Klassen ein Objekt erstelle, dieses als Prototyp in einer Liste speichern und bei Bedarf dann mit Hilfe einer ID von diesem Prototypen durch Kopieren die benötigten Instanzen erzeugen.

    Das Projekt muss unter Linux (gcc) und Windows (vstudio 7.?) erstellt werden. Bisher habe ich mich im Rahmen von dem, was im Internet und in meinen beiden C++ Büchern einfach zum Thema dll-Erstellung, shared objects und dynamischer Erweiterung zu finden ist informiert und festgestellt, dass in Windows das Exportieren von Klassen und Objekten nur dann möglich ist, wenn man die Klasse als Tochterklasse von CWinApp erstellt, also die MFC-Bibliothek mit einbindet. Gibt es da eine andere Möglichkeit?

    Mir ist klar, dass ich unter Linux nicht mit Hilfe der dll arbeiten kann, aber ich denke, dass dieses Problem mit einer Compilerdirektive umgegangen werden kann, sofern ich es erstmal schaffe, auch unter Windows eine ganz normale Klasse exportieren zu können.

    Ich würde mich über eure Ideen freuen, selbstverständlich reicht auch ein Link oder Literaturhinweis. Bei Fragen gerne auch mail. hajo32@freenet.de

    Gruß und danke Hajo



  • Lass mal nach *dll* suchen, das wird eine ziemliche Liste.
    Dieser hier sah nett aus: http://www.c-plusplus.net/forum/viewtopic-var-t-is-132130.html
    Der hier auch: http://www.c-plusplus.net/forum/viewtopic-var-t-is-132296.html

    Falls du eine noch bessere Erklärung findet, zeig mal - sowas fehlt in der FAQ noch.



  • In Standard-DLLs kannst du keine Klassen exportieren, alles andere ist Compilerabhängig



  • danke erstmals für eure Antworten.
    @estartu:
    Zu den Themen *dll* habe ich ein sehr interessantes Tutorial gefunden, vielleicht willst du es ja irgendwie in dein FAQ/link sammlung aufnehmen.

    hier ist es:
    http://www.fachinformatiker-ihk.de/download/extras/DLL.pdf

    Falls es euch interessiert, werde ich heute abend berichten, ob und wie ich in meinem konkreten Problem eine Lösung gefunden habe.

    erster Ansatz:
    Innerhalb der Plugindatei (dll bzw. shared library) instanziere ich meine Objekte, speichere sie intern in einer Liste ab und übergebe die Pointer nach der Konstruktion an meine Hauptanwendung.

    Im Hauptprogramm befindet sich eine Instanz einer Wrapperklasse, welche als Tochterklasse der Basisklasse erstellt wird. Die Wrapperklasse bekommt zusätzlich noch eine Methode, in der ich den gewünschten Pointer angebe.

    Die überladenen Methoden rufen dann eine entsprechende Funktion in der dll auf, welche als zusätzliches Argument den Pointer mitgeliefert bekommt.
    In dieser Funktion der dll wird die Methode der durch den Pointer adressierten Instanz schließlich korrekt aufgerufen.

    Ich hoffe nur, dass sich hierbei nicht zuviel Kommunikationsaufwand ergibt, da ich gut und gerne auch mal tausende von Instanzen der Basisklasse erstellen will.

    Gruß Hajo


Anmelden zum Antworten