QPluginLoader will Plugin nicht laden
Verfasst: 26. November 2008 19:03
Hallo,
ich versuche hier verzweifelt ein Plugin in meine Anwendung zu laden, aber es klappt nicht. Hier mal der Code:
Das Interface für das Plugin ist so definiert:
das Plugin selber sieht dann so aus:
und so:
Das Plugin kann ich Übersetzen und es wird dann im plugin-Verzeichnis unter dem Namen libmyPlugin.so abgelegt.
Jetzt versuche ich es aus meiner Anwendung zu laden:
Das Plugin wird gefunden "std::cout << qPrintable(fileName) << "\n";" gibt den Dateinamen des Plugins aus. Allerdings wird die IF Anweisung nie "true" und ich lande immer im else-Zweig.
Hat ihr eine Idee was hier nicht stimmt?
Danke!
ich versuche hier verzweifelt ein Plugin in meine Anwendung zu laden, aber es klappt nicht. Hier mal der Code:
Das Interface für das Plugin ist so definiert:
Code: Alles auswählen
#ifndef INTERFACE_H
#define INTERFACE_H
#include <QtPlugin>
class PluginInterface
{
public:
virtual ~PluginInterface() { }
virtual QString pluginName();
};
Q_DECLARE_INTERFACE(PluginInterface, "cops.demo.PluginInterface/1.0")
#endif
Code: Alles auswählen
#ifndef MYPLUGIN_H
#define MYPLUGIN_H
#include <QString>
#include "myPlugin.h"
#include "../pluginInterface.h"
class MyPlugin : public QObject, public PluginInterface
{
Q_OBJECT
Q_INTERFACES(PluginInterface)
public:
QString pluginName();
};
#endif
Code: Alles auswählen
#include <QtGui>
#include <iostream>
#include "myPlugin.h"
QString MyPlugin::pluginName()
{
return "My Plugin Name";
}
Q_EXPORT_PLUGIN2(myplugin, MyPlugin)
Jetzt versuche ich es aus meiner Anwendung zu laden:
Code: Alles auswählen
void MainWindow::loadPlugins()
{
QDir pluginDir(QApplication::applicationDirPath());
if (!pluginDir.cd("plugins"))
return;
foreach (QString fileName, pluginDir.entryList(QDir::Files)) {
std::cout << qPrintable(fileName) << "\n";
QPluginLoader loader(pluginDir.absoluteFilePath(fileName));
if (PluginInterface *interface = qobject_cast<PluginInterface *>(loader.instance())) {
interfaces.append(interface);
std::cout << qPrintable(interface->pluginName()) << "loaded \n";
} else {
std::cout << "not loaded!\n";
}
}
}
Hat ihr eine Idee was hier nicht stimmt?
Danke!