Newsgroup: it.comp.lang.c
Titolo: Creare un programma con capacita di caricare plugin

Salve a tutti,
sto cercando in giro documentazione, esempi o suggerimenti vari per
costruire un programma in puro C (possibilmente ANSI) che possa essere in
grado di caricare dei plug-in dinamicamente a runtime anch'essi scritti in
C.
Il programma avrei piacere funzionasse sia sotto sistemi Unix che sotto
sistemi Windows, quindi preferirei evitare l'uso di DLL, .so o roba
simile...
La mia idea era quella di trovare il modo di caricare dinamicamente in file
.o invece di includerlo all'atto della compilazione....
insomma se non erro creare una sorta di tecnica simile a quella dei file OWL
del vecchio DOS..... o no?!?!?
Be insoma mi serve poter estendere in programma principale con dell
funzionalità in modo dinamico a runtime mantenendo assolutamente il massimo
delle prestazioni possibili nella comunicazione tra mainprg e plugin....
Faccio un esempio:
Ho un programma cha fa il plot di alcuni dati che ha in un suo array.....
Esiste la possibilità di caricare a runtime una funzionalità
di filtro (matematico) di questi dati che sia in grado eseguire il tutto
praticamente in real-time..... Quindi il plug-in deve essere in grado di
lavorare dirattamente sulla stessa area dati del mainPrg e el contempo anche
di restiruire una area dati allocata dinamicamente allo stesso mainPrg...
Qualcuno ha idee????  sarebbe bello leggere in formato binario direttamente
il file .o compilato mediante un fread(); e sapendo
come ricavare i puntatori alle funzioni interne compilate (logicamente con
lo stesso compilatore ad esempio GCC), agganciarle
con dei bei Cast ad una struttura dati appositamente studiata come
interfaccia.....
grazie a tutti,
Luca

 del vecchio DOS..... o no?!?!?
Dunque... Non credo che si possa fare e ti spiego il perchè...
Le tue opzioni sarebbero due:
- caricare in una qualche maniera del codice aggiuntivo "fondendolo" con il
tuo programma (per farti un esempio: fai una malloc di 100 kb, e in questo
100 kb ci carichi un altro programma, poi jumpi a questa area di memoria. A
dirla così sembra complicata, ma non lo è particolarmente). Problema: certe
CPU unite a certi SO (vedi Athlon 64 + WinXP SP2 (non mi dire che il SP2
dell'XP non esiste. Va a vedere quali feature ha e poi torna qui)) non
permettono di eseguire codice in aree di memoria che non siano appositamente
flaggate come eseguibili... Risultato? Visto che chiaramente i comandi per
flaggare le aree di memoria come eseguibili non sono ANSI, non puoi fare una
soluzione portabile.
- eseguire un altro processo e poi passargli i dati in qualche maniera...
Problema: l'unica funzione ANSI per eseguire un altro processo è la system,
e non ti dà molto controllo sul nuovo processo. Non so se la redirezione di
input e output siano definiti a livello ANSI... Non credo. Credo che siano
più una cosa POSIX (che poi siano supportati anche dal DOS/Windows è un
altro paio di maniche)
--- bye

Non credo ci sia nessun metodo ANSI per fare una cosa del genere.
[OT]
Se ti puo' andar bene uscire dall'ANSI, ma rimanere nel portabile, 
guarda le GNU libtool.
[/OT]
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://www.cs.unibo.it/~mbellett
Linux registered user 299762 @ Linux registered machine 213003