Ich häng grad voll fest.
Hab ein Programm das mit Hilfe von QPluginLoader ein Plugin laden soll.
Das Programm baut und das Plugin baut auch. Habs mittlerweile alles mehrfach mit der Doku von trolltech und den Beispielen abgeglichen.
Hab extra 2 neue Projekte gemacht zum Testen.
Er wills aber einfach nicht laden. Windows oder Linux is egal. hab ich beides probiert.
als Fehler wirft er mit immer nur "Unknown Error" hin.
Hier der Quelltext vom Programm:
ModuleInterface.h - Die Schnittstelle
Code: Alles auswählen
#ifndef MODULEINTERFACE_H_
#define MODULEINTERFACE_H_
#include <QtPlugin>
#include <QString>
class ModuleInterface
{
public:
virtual ~ModuleInterface() {}
virtual QString pluginInfo() = 0;
};
QT_BEGIN_NAMESPACE
Q_DECLARE_INTERFACE(ModuleInterface, "KBS.KBSTrade.ModuleInterface/1.0");
QT_END_NAMESPACE
#endif /* MODULEINTERFACE_H_ */
TestLoader.h - Klasse die das Plugin laden soll
Code: Alles auswählen
#ifndef TESTLOADER_H_
#define TESTLOADER_H_
#include <QtCore>
class TestLoader : public QObject
{
Q_OBJECT
public:
TestLoader();
virtual ~TestLoader();
void loadPlugin();
};
#endif /* TESTLOADER_H_ */
Code: Alles auswählen
//includes,De und konstrukor hab ich mal weggelassen
void TestLoader::loadPlugin()
{
qDebug() << "Loader running";
QPluginLoader loader("srvplugin.dll");
if(loader.isLoaded())
qDebug() << "Loading OK";
QObject *instance = loader.instance();
if(instance)
{
qDebug() << "Plugin instanced";
qDebug() << loader.errorString();
ModuleInterface *module = qobject_cast<ModuleInterface *>(instance);
if(module)
module->pluginInfo();
}
qDebug() << loader.errorString();
}
Code: Alles auswählen
#include <QtCore>
#include <QObject>
#include <QString>
#include "ModuleInterface.h"
class SrvPlugin : public QObject, public ModuleInterface
{
Q_OBJECT
Q_INTERFACES(ModuleInterface)
public:
QString pluginInfo();
};
Code: Alles auswählen
#include "SrvPlugin.h"
QString SrvPlugin::pluginInfo()
{
return "Hallo Welt vom Plugin";
}
Q_EXPORT_PLUGIN2(srvplugin, SrvPlugin);
Programm:
Code: Alles auswählen
TEMPLATE = app
TARGET = PluginServer
QT += core
HEADERS += ModuleInterface.h \
TestLoader.h
SOURCES += TestLoader.cpp \
main.cpp
FORMS +=
RESOURCES +=
CONFIG += console
Code: Alles auswählen
TEMPLATE = lib
CONFIG += plugin
QT += core
HEADERS += SrvPlugin.h
SOURCES += SrvPlugin.cpp
DESTDIR = ../PluginServer
TARGET = srvplugin
INCLUDEPATH += ../PluginServer
Achja das EchoPlugin-Beispiel baut auf beiden Systemen find aber den unterschied zu meinem nich.