Hi,
kennt jemand einen link zu plugin programierung mit c++ , ein Buch oder kann mir etwas dazu erzählen?
-ich möchte wissen wie eine Schnittstelle zwischen plugin und hauptprogram aufgebaut sein muss
-wie das Hauptprogram ein neues plugin z.B. in einem Verzeichniss erkennt und einbindet
thx
plugins programmieren
- peschmae
- Beiträge: 4844
- Registriert: 07.01.2003 12:50:33
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: nirgendwo im irgendwo
Also für Qt sieht ein minimales Pluginprogramm etwa so aus (hatte mir das mal gebastelt):
main.cpp
interface.h
testplugin.h
testplugin.cpp
Sieht natürlich etwas anders aus - vor allem der Teil zum Laden der Bibliothek - wenn du nicht Qt verwendest. Da müsstest du dann statt dem portablen QLibrary zeugs dlopen oder so verwenden.
MfG Peschmä
main.cpp
Code: Alles auswählen
#include "interface.h"
#include <qlibrary.h>
#include <qstring.h> //only as Return Value is QString
#include <iostream> //only for testoutput
typedef Interface* (*getPluginFunction)();
int main(int argc, char *argv[]) {
std::cout << "bla" << std::endl;
QLibrary lib( "testplugin" );
getPluginFunction pl = (getPluginFunction) lib.resolve("getPlugin");
Interface* i = pl();
QString s = i->getText();
std::cout << s << std::endl;
i->slot();
std::cout << "i->slot() was called" << std::endl;
}
Code: Alles auswählen
#ifndef INTERFACE_H
#define INTERFACE_H
#include <qobject.h>
class QString;
class Interface : public QObject {
Q_OBJECT
public:
virtual QString getText() = 0;
public slots:
virtual void slot() = 0;
};
#endif
extern "C" {
Interface* getPlugin();
}
Code: Alles auswählen
#ifndef TESTPLUGIN_H
#define TESTPLUGIN_H
class QString;
#include "interface.h"
class TestPlugin : public Interface {
Q_OBJECT
public:
virtual QString getText();
public slots:
virtual void slot();
};
#endif
Code: Alles auswählen
#include "testplugin.h"
#include <qstring.h>
#include <iostream>
Interface* getPlugin() {
return new TestPlugin();
}
QString TestPlugin::getText() {
std::cout << "**** TestPlugin::getText() invoked" << std::endl;
return QString("**** QString - Returnvalue from Testplugin");
}
void TestPlugin::slot() {
std::cout << "**** TestPlugin::slot() invoked" << std::endl;
}
MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy