Seite 1 von 1

QT 4.8 auf 5: Pluginloader->instance() klappt nicht

Verfasst: 17. Januar 2013 08:44
von Feyh
Hallo zusammen,

mich treibt folgendes Problem hier her:
Ich habe in QT 4.8.2 ein Programm geschrieben, das seine wichtigste Funktionalität durch Plugins erhält.
In QT 4.8.2 hat noch alles einwandfrei funktioniert, nun konvertiere ich es auf Qt 5.

Folgender Abschnitt funktioniert seither nicht mehr wie vorgesehen:

Code: Alles auswählen

        //Die Variable fileName enthält die Bezeichnung der .dll
	pluginLoader->setFileName(pluginsDir->absoluteFilePath(fileName));

        //In a steht nach dem folgenden Befehl auch die korrekte Bezeichnung samt Pfad. Sprich der pluginLoader kennt die Datei nun
        QString a = pluginLoader->fileName();

       //Bis hier her läuft alles wie gewohnt. Jetzt kommt der "Fehler".

        //plugin bleibt leer und success ist dementsprechend false
        QObject *plugin = pluginLoader->instance();
        bool success = pluginLoader->isLoaded();
Mein Plugin habe ich an das neue System in QT 5 angepasst.

Mein Plugin-Header:

Code: Alles auswählen

class NLPro : public QObject, IConnection
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID "NLPro" FILE "nlpro.json") // <- Neu seit Qt 5
    Q_INTERFACES(IConnection)
...
}

Code: Alles auswählen

Q_EXPORT_PLUGIN2(NLPro, NLPro);  // Habe ich aus der .cpp rausgeschmissen
eine .json-Datei habe ich angelegt:

Code: Alles auswählen

{ "Keys": [ "NLPro"] }
pluginLoader->errorString() gibt mir übrigens die Meldung, dass die angegebene Datei kein gültiges Qt-Plugin ist:
"The file '.../plugins/nlprod.dll' is not a valid Qt plugin."

Ich habe mir Beiträge wie
http://qt-project.org/doc/qt-5.0/qtwidg ... paint.html
und
http://qt-project.org/wiki/Transition_f ... 4.x_to_Qt5
durchgelesen und das ganze eben auch nach diesem Vorbild umgebaut, jedoch verstehe ich nicht, warum mein Plugin nicht geladen wird.

Hat hier jemand eine Idee?
Vielen Dank im Voraus.

Grüße
Feyh