PDA

View Full Version : [C] ::. Architettura a plugin .::


mjordan
08-02-2006, 06:00
Mi domandavo se qualcuno di voi ha mai sviluppato un sistema per caricare a run-time dei plug-in creati ad hoc per un vostro programma. Quali tecniche avete usato? Quali sono i possibili metodi per implementare una magia del genere?
Parliamone, perchè oltre ad essere molto interessato, sono sicuro che interesserà a molti altri.

ilsensine
08-02-2006, 07:59
Puoi utilizzare il caricamento dinamico delle librerie (ad es. dlopen/dlclose ecc.) oppure il caricamento con LD_PRELOAD e "registrare" il tuo plugin con funzioni di costruzione apposite (dichiarate con __attribute__((constructor)) )

mjordan
08-02-2006, 09:01
Puoi utilizzare il caricamento dinamico delle librerie (ad es. dlopen/dlclose ecc.) oppure il caricamento con LD_PRELOAD e "registrare" il tuo plugin con funzioni di costruzione apposite (dichiarate con __attribute__((constructor)) )

Si avevo pensato a questo. Ma secondo te un'architettura fatta bene dovrebbe "forzare" l'uso di una API messa a disposizione del programma? Oppure lasciare libero spazio all'implementazione del plugin? E come si potrebbe realizzare una simile "forzatura"?

Inoltre mi chiedo come si potrebbe rendere tutto ciò portabile in sistemi non Unix senza passare per le Win32 API e tonnellate di #ifdef

mjordan
08-02-2006, 09:04
Un'altra cosa, in cosa potrebbe rientrarci i flag -PIC e -FPIC di GCC in tutto ciò?

cionci
08-02-2006, 10:24
DEVI forzare l'uso di una architettura particolare al plug-in altrimenti non sai quali funzioni andare a richiamare... Mettere a disposizione un framework o meno, dipende da quanto e come il plug-in deve interagire con il programma principale...

ilsensine
08-02-2006, 10:46
Un'altra cosa, in cosa potrebbe rientrarci i flag -PIC e -FPIC di GCC in tutto ciò?
position-indipendent code. E' quel frag che ti consente di cambiare una libreria (con un'altra contenente gli stessi simboli, ma in posizioni diverse) senza ricompilare il programma.

mjordan
09-02-2006, 02:22
DEVI forzare l'uso di una architettura particolare al plug-in altrimenti non sai quali funzioni andare a richiamare... Mettere a disposizione un framework o meno, dipende da quanto e come il plug-in deve interagire con il programma principale...

Tu hai fatto mai una cosa del genere in Windows? :confused:

mjordan
09-02-2006, 02:24
E' quel frag

Mi sa che giochi troppo a Quake III Arena ultimamente... :D

cionci
09-02-2006, 06:10
Tu hai fatto mai una cosa del genere in Windows? :confused:
Ho fatto qualche prova... Mai comunque mettendo a disposizione un framework per i plugin...

Diciamo che principalmente quella che devi definire è l'interfaccia del plug-in...e quella deve rimanere standard per tutti i plug-in...