Oder meinst du etwas völlig anderes, was meinst du zum Beispiel mit anziehen?
anziehen == instantieiren
neee iss scho richtig wie du es machst ....
was ich meine, ist du darfst dann so den autodelete mechanismus nicht von der qt nutzen ... also sprich mit
new testNode(QObject *) instanzieiren, und das loeschen der qt ueberlassen .... weil die loescht aus deiner exe raus.
wichtig ist noch, unabhaengig von der qt: new und delete muessen immer in der selben uebersetzungseinheit erfolgen. also new in der dll und delete aus der exe raus gibt dir undefiniertes verhalten
Damit das Hauptprojekt nicht neu kompiliert werden muss, falls mal neue Knoten hinzugefügt werden.
Das ist ein gutes Motiv fuer eine dll ....
Aber muessen deine Knoten unbeding qt objecte sein ? bringt dir signal / slot mechanismus so viel ?
und noch was .... fuer signal / slots (intern sind das events) brauchst du die oder eine Instanz von QApplication in der dll !!!!
willst du events über die dll drueber hinaus feuern, muss die dll die qApp von deiner exe kennen !
deswegen, wenn ich plugins schreibe, mach ich fast alles aussschliesslich ueber interfaces. Also meine exportierten Klassen sind fast immer nur reine abstrakte klassen.
Probleme wenn du klassen ueber die dll schnittstelle schickst, muessen alle signatueren 100% uebereinstimmen. bei abstrakten methoden iss das recht gegeben. der vorteil bei rein abstrakten klassen ist, dass die definition der methoden allein schon durch die polymorphie weiterdeligiert wird, und zwar in deine dll hinein. von ner abstrakten klasse musst, bzw darfst du ueberhaupt keinen code kennen ^^
Aber exportier mal z.b. nen std::string. sieht aufn ersten blick easy aus. du linkst aber dann die dll und die exe mit der c++ runtime. und die wissen beide genau wie der std::string aufgebaut ist, um damit zu arbeiten. solange das 100% uebereinstimmt, iss das kein problem .... ansosnten kommts zum supergau
wie koennen nu unterschiede in der binaerdefinitionen (signaturen) entstehen ???
ohja, da gibts viele fallstricke.
compilerflags !!! es gibt flags die beeinflussen die ausrichtung der variablen am speicher. benutzt deine dll andere flags (die das beeinflussen) als deine exe ... knallts da gewaltig.
unterschidliche versionen der bibliotheken, wenn die zugelinkt werden.
benutz mal ne dll die mit ner multithreaded runtime uebersetzt wird, und link die zu ner exe die mit singlethread uebersetzt wurde. wenn dann ausdefinierte klassen ueber die schnittstelle schickst, aua ! genau so debug und release versionen. ausdefinierte klassen -> crash.
unterschiedliche qt verionen, selbes problem !
du hasst aber dll und exe selber in der hand (das iss nen riesen vorteil). mit strengen konventionen kannst da scho was erreichen.
trotzdem isses ned trivial ...
wenn deine dll austauschbar bleibt ... musst du die zugehoerigkeit dll-exe ziemlich restrikt gestalten. beispielsweisse du baust ne neue exe mit ner neuen qt version ... baust dann auch die dll mit neu.
alles kein problem, biss der user selbst auf die idee kommt, und die dlls austauscht. dannn hasst wieder den konflikt (DLL versionen checken !!!) ....
deswegen solltest da echt genau abewaegen was machst ... und ob dir dein weg beim programmieren so viel vorteile bringt, das es die nachteile der versionspflege und des kompatiblitaetsmanagments hinterher aufwiegt.
wenn du zu der exe soweiso immer die richtige dll pflegen musst und andersrum, ist der Vorteil deiner dll eigentlich marginal ....
Ciao ...