QT-Dialoge in DLL's verpacken
Verfasst: 27. August 2005 18:54
Sehr geehrtes Forum,
ich teste gerade eine von mir konzipierte, modulare Softwarearchitektur auf technische Machbarkeit. Sie soll plattformunabhängig sein und ich habe mich daher für die Implementierung mit C++ im Zusammenhang mit QT entschieden.
Meine derzeitige Entwicklungsumgebung:
MS Visual Studio 6.0 // C++ // QT 3.3.4 // (kein MFC!)
Die Modularität will ich dadurch erreichen, dass ich beim Start der Hauptapplikation DLL's lade (bzw. SO's unter Linux) und diese später aus der Hauptapplikation aufgerufen werden können.
Ein rudimentäres PlugIn-Framework habe ich dazu bereits geschrieben. Was mir nun Bauchschmerzen bereitet ist folgendes:
Bisher habe ich es in unzähligen Versuchen NICHT hinbekommen, einen QT-Dialog in eine DLL zu "verpacken", geschweige denn, diesen irgendwie aus der DLL zu exportieren. Sobald ich in einem DLL-Projekt qt-spezifischen Code einfüge und die Linkereinstellungen entsprechend ändere, kann ich zwar korrekt durchkompilieren, jedoch bekomme ich immer 8 Linkerfehler. Mein Ziel ist es, nach dem erfolgreichen Laden eines PlugIns einen, in der DLL befindlichen QT-Dialog, aus der Hauptapplikation aufrufen zu können. Was ist zu tun, damit ich mein Vorhaben realisieren kann? Liegt es an den Linkereinstellungen, oder gehe ich komplett falsch vor? In der QT-Dokumentation habe ich auch nichts konkretes für mein Problem finden können.
Hier der Auszug meiner Linkerfehler:
Für einen heißen Tip wäre ich sehr dankbar!
ich teste gerade eine von mir konzipierte, modulare Softwarearchitektur auf technische Machbarkeit. Sie soll plattformunabhängig sein und ich habe mich daher für die Implementierung mit C++ im Zusammenhang mit QT entschieden.
Meine derzeitige Entwicklungsumgebung:
MS Visual Studio 6.0 // C++ // QT 3.3.4 // (kein MFC!)
Die Modularität will ich dadurch erreichen, dass ich beim Start der Hauptapplikation DLL's lade (bzw. SO's unter Linux) und diese später aus der Hauptapplikation aufgerufen werden können.
Ein rudimentäres PlugIn-Framework habe ich dazu bereits geschrieben. Was mir nun Bauchschmerzen bereitet ist folgendes:
Bisher habe ich es in unzähligen Versuchen NICHT hinbekommen, einen QT-Dialog in eine DLL zu "verpacken", geschweige denn, diesen irgendwie aus der DLL zu exportieren. Sobald ich in einem DLL-Projekt qt-spezifischen Code einfüge und die Linkereinstellungen entsprechend ändere, kann ich zwar korrekt durchkompilieren, jedoch bekomme ich immer 8 Linkerfehler. Mein Ziel ist es, nach dem erfolgreichen Laden eines PlugIns einen, in der DLL befindlichen QT-Dialog, aus der Hauptapplikation aufrufen zu können. Was ist zu tun, damit ich mein Vorhaben realisieren kann? Liegt es an den Linkereinstellungen, oder gehe ich komplett falsch vor? In der QT-Dokumentation habe ich auch nichts konkretes für mein Problem finden können.
Hier der Auszug meiner Linkerfehler:
Code: Alles auswählen
LINK : warning LNK4044: Nicht erkannte Option "mt334.lib"; ignoriert
Bibliothek Debug/dll2.lib und Objekt Debug/dll2.exp wird erstellt
dll2.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: virtual bool __thiscall qt_dll1Dialog::qt_property(int,int,class QVariant *)" (?qt_property@qt_dll1Dialog@@UAE_NHHPAVQVariant@@@Z)
dll2.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: virtual bool __thiscall qt_dll1Dialog::qt_emit(int,struct QUObject *)" (?qt_emit@qt_dll1Dialog@@UAE_NHPAUQUObject@@@Z)
dll2.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: virtual bool __thiscall qt_dll1Dialog::qt_invoke(int,struct QUObject *)" (?qt_invoke@qt_dll1Dialog@@UAE_NHPAUQUObject@@@Z)
dll2.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: virtual void * __thiscall qt_dll1Dialog::qt_cast(char const *)" (?qt_cast@qt_dll1Dialog@@UAEPAXPBD@Z)
dll2.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: virtual char const * __thiscall qt_dll1Dialog::className(void)const " (?className@qt_dll1Dialog@@UBEPBDXZ)
dll2.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static class QMetaObject * __cdecl qt_dll1Dialog::staticMetaObject(void)" (?staticMetaObject@qt_dll1Dialog@@SAPAVQMetaObject@@XZ)
dll2.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: static class QString __cdecl qt_dll1Dialog::tr(char const *,char const *)" (?tr@qt_dll1Dialog@@SA?AVQString@@PBD0@Z)
Debug/dll2.dll : fatal error LNK1120: 7 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.
Browse-Informationsdatei wird erstellt...
dll2.dll - 8 Fehler, 2 Warnung(en)