plugins programmieren

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ZzLeCzZ
Beiträge: 245
Registriert: 15.12.2003 19:34:00

plugins programmieren

Beitrag von ZzLeCzZ » 12.05.2005 19:32:14

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

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Beitrag von peschmae » 12.05.2005 20:35:22

Also für Qt sieht ein minimales Pluginprogramm etwa so aus (hatte mir das mal gebastelt):

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;
}
interface.h

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();
}
testplugin.h

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
testplugin.cpp

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;
}
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ä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

ZzLeCzZ
Beiträge: 245
Registriert: 15.12.2003 19:34:00

Beitrag von ZzLeCzZ » 13.05.2005 11:01:43

cool danke das ist ja schonmal ein guter anfang :-)
werd mir mal dlopen ansehen...
thx

Antworten