Plugin Schnittstelle
-
Hallo,
ich würde gerne eine wirklich brauchbare Plugin-Schnitstelle basteln um mein Programm einfacher erweitern zu können...
Hat jemand diesbezüglich Erfahrung und kann mir ein paar Links geben um das zu bewerkstelligen?
Mich würd's auch freuen, wenn mir jemand diesbezüglich ein paar Design-Tipps gibt damit das ganze den größtmöglichen nutzen hat.Ich hab schon so eine Plugin-Schnitstelle gebastelt allerdings finde ich diese reichlich unpraktisch.
Gruß Patrick
Danke im Voraus
-
forensuche mit < *plugin* > und du wirst einiges finden.
auf flipcode.com war auch ein gutes tutorial, finde es aber gerade nicht.
-
Vielen Dank für deine Antwort

Ich hab auch im Forum rumgesucht nur hat mir das alles nicht wirklich weitergeholfen...
Ich hab mal nen bisschen gegoogelt und das gefunden:
http://www.flipcode.com/articles/article_winplugins.shtmlIst es das was du meintest?
Hier mal der Code für das PluginSystem was ich gebastelt hattee:
//PluginSystem.h #ifndef PLUGIN_SYSTEM_H #define PLUGIN_SYSTEM_H #include <vector> #include <windows.h> #include "PluginInterface.h" #include "PluginException.h" typedef PluginInterface*(*GetPlugin)( void ); struct PluginHolder; typedef std::vector<PluginHolder> PluginVec; typedef std::vector<PluginHolder>::iterator PluginVecIt; struct PluginHolder { HINSTANCE LibPort; GetPlugin pPlugin; }; class PluginSystem { private: PluginVec m_Plugins; public: PluginSystem(); ~PluginSystem(); PluginInterface *GetPluginClass( GetPlugin pPlugin ) { return (*pPlugin)(); } }; #endif //PluginSystem.cpp #include <fstream> #include "PluginSystem.h" PluginSystem::PluginSystem() { std::string ReadBuffer; PluginHolder Temp; std::ifstream PluginFile( "Plugins.cfg" ); if (PluginFile.good()) { while (PluginFile.good()) { std::getline( PluginFile, ReadBuffer, '\n' ); Temp.LibPort = LoadLibrary( ReadBuffer.c_str() ); if ( Temp.LibPort != NULL ) { Temp.pPlugin = (GetPlugin) GetProcAddress( Temp.LibPort , "GetPlugin" ); if (Temp.pPlugin) { (*Temp.pPlugin)()->PluginLoad(); m_Plugins.push_back( Temp ); } else { PluginError("Plugin '" + ReadBuffer+ "' ist ungueltig!"); } } else { PluginError("Konnte Datei '" + ReadBuffer+ "' nicht laden!"); } } } else { PluginError("Konnte Datei 'Plugins.cfg' nicht laden!"); } } PluginSystem::~PluginSystem() { for(PluginVecIt Plugins = m_Plugins.begin(); Plugins != m_Plugins.end(); Plugins++) { GetPluginClass( Plugins->pPlugin )->PluginUnLoad(); FreeLibrary( Plugins->LibPort ); } } //PluginInterface.h #ifndef PLUGIN_INTERFACE_H #define PLUGIN_INTERFACE_H #include "PluginException.h" class PluginInterface { public: virtual PluginUnLoad() = 0; virtual PluginLoad() = 0; }; #endifIch persönlich finde meins nicht so toll ich finde es sieht irgendwie unvollständig aus... Was haltet ihr davon?
Danke
Gruß Patrick