|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
[C++] Come funzionano i plugins ?
Ho un eseguibile (mumble) che non dovrebbe essere mai modificato.
Ho delle librerie che dovrebbero essere linkate all'eseguibile ma solo una alla volta, un eseguibile per ogni libreria. Per adesso sò che il plugin dovrà avere almeno 2 parametri, una stringa e l'owner, Ma se nel futuro avrò bisogno di plugins con più parametri, come posso renderli dinamici ? Il problema è che non posso chiamare direttamente la libreria ma ho mumble come interfaccia quindi attualmente la chiamata del plugin, nel main di mumble, è fatta così: Codice:
... #ifdef SUPERCLIENT Plugin p(qsCfgFileName, app); #endif ... la classe Plugin è la seguente: Codice:
#ifndef PLUGIN_H_ #define PLUGIN_H_ #define STRINGIFY(x) #x #define TOSTRING(x) STRINGIFY(x) #include TOSTRING(PLUGIN_CLASSFILE) class Plugin : public PLUGIN_CLASS { public: Plugin(const QString& sCfgFile, QApplication& owner) : PLUGIN_CLASS(sCfgFile, owner) {} }; #endif /*PLUGIN_H_*/ Quindi se voglio usare un plugin di nome Pippo la cui classe è dichiarata nel file Pippo.h, passerò al compilatore PLUGIN_CLASSFILE=Pippo.h e PLUGIN_CLASS=Pippo Però son bloccato a questi 2 parametri, nel futuro se voglio aggiungerne dovrò modificare il codice di mumble. C'è un modo per evitare ciò ? Grazie
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
I plugin funzionano solitamente con delle dll linkate a tempo di esecuzione. L'interfaccia delle dll è comune per tutte, per implementare un plugin bisogna implementare le funzioni/classi definite nell'interfaccia della dll con il programma.
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
Cioè, se vuoi modificare i parametri al plugin, devi ridefinire l'interfaccia e ricompilare . Comunque l'unica funzione che hanno in comune è il costruttore perchè tutti i plugins sono classi derivate da QThread, quindi hanno un metodo run() obbligatorio (in QThread è pure virtual). Questo perchè mumble usa QT e se non usiamo un thread è impossibile lanciare un programma da mumble (è un pò lunga spiegare). PS: Grazie e ben tornato ![]()
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:18.