T
und wie es aussieht, können ja nur extern "C"-Funktionen (ohne Name Mangling) exportiert werden.
Das ist nicht korrekt. Es gibt mehrere Mögl. Dinge zu exportieren.
Auch gemangelte Dinge können exportiert werden.
Alles eine Frage davon was der Konsument erwartet und der Erstellrer zur Verfügung stellt.. muss einfach zusammenpassen.
du musst eine funktion exportieren, die dir eine neue klasseninstanz erstellt
Wenn das gemacht wird, muss auch wieder aufgeräumt werden und dass MUSS wieder in der DLL gemacht werden, welche das new aufgerufen hat. Also entweder analog zu CreateInstance(..) noch DeleteInstance(..) oder eine virtuelle destroy(..) Member Funktion.
Eine häufige Variante Klassen zu exportieren ist so:
1. Interface definieren (abstrakte Klasse, mit pure virtual's)
2. Eine Impl. erstellen, welche das Interface impl. (in der DLL)
3. Factory Funktionen (new / delete) erstellen (wie antwort! angemerkt hat)
Der Client benötigt dann nur das Interface (welches er als Header File includiert) und nur das! In der exportierten Klasse steht dann rein gar nichts mehr dass sie exportiert wird (KEIN class EXPORT_MAP Map).
Eine andere, weniger flexiblere Variante, ist die ganze Klasse mit dem __declspec(dllexport) zu markieren ( class EXPORT_MAP Map).
Dann benötigt man aber keine Factory Funktionen. Jedoch darf das export makro nicht das namemangling unterbinden.
Es macht kein Sinn, die Klasse mit dem __declspec(dllexport) zu markieren UND das namemangling auszuschalten.
Es gibt noch viele andere Möglichkeiten.
Simon