Gambas-it
Archivi (sola lettura) => Programmazione (Gambas 2) => Topic aperto da: kirner - 28 Maggio 2008, 16:34:07
-
Salve a tutto il gruppo,
mi domandavo se era possibile istruire il pacchetto di installazione ad installare anche una dipendenza non inerente a gambas.
mi spiego meglio ho fatto un frontend per un tool testuale, ma dovrei in fase di installazione del pachetto fargli anche installare il tool.
ok grazie a chi puo' darmi qualche dritta :)
-
Ciao.
Secondo me è meglio che il tuo frontend verifichi
la presenza del tool sul sistema. Nel caso che non ci sia
metti un messaggio all'utente che spieghi dove reperire il tool.
In teoria, potresti anche installare direttamente il tool, ma non è
detto che l'eseguibile del tool compilato sul tuo sistema vada bene
anche nel sistema che dovrà ospitarlo.
-
grazie, anche se non e' proprio come avevo intenzione di fare, mi hai dato una bella idea.
Thx ;)
-
Comeunque, ad oggi, gambas non prevede l'inclusione di file esterni durante la creazione dei pacchetti.
-
md9327 ha scritto:
Comeunque, ad oggi, gambas non prevede l'inclusione di file esterni durante la creazione dei pacchetti.
Più o meno. Se nel tuo progetto metti una cartella con files di tuo interesse,
questa viene inglobata nell'eseguibile e all'occorrenza i files possono essere
estratti e usati. Allego un piccolo esempio per spiegare la procedura.
-
giulio ha scritto:
md9327 ha scritto:
Comeunque, ad oggi, gambas non prevede l'inclusione di file esterni durante la creazione dei pacchetti.
Più o meno. Se nel tuo progetto metti una cartella con files di tuo interesse,
questa viene inglobata nell'eseguibile e all'occorrenza i files possono essere
estratti e usati. Allego un piccolo esempio per spiegare la procedura.
Grazie per l'allegato,
anche se nel caso specifico ho risolto diversamente, mi e' tornato molto utile e ne ho compreso l'utilita' mi servira' per il futuro.
Grazie ancora!
-
Bravo Giulio, questa mi giunge nuova e pure inaspettata...
Ho letto le poche ma esplicative righe del tuo esempio, e la cosa mi lascia di stucco, nonchè perplesso.
Ovviamente stasera lo provo, la cosa mi interessa molto perchè spiega molte cose su Gambas, oltre al fatto che amplia i confini di quello che ci si può fare...
La cosa brutta è che, credendolo impossibile, non ho mai provato a farlo...
La stranezza è il come gambas riesca a capire da dove prelevare il file, dato che questo è inglobato nell'eseguibile...
La mia domanda, prima di provarlo stasera a casa, è: il nome "mybin" all'interno della COPY, viene interpretato non come directory, ma come puntamento all'eseguibile stesso, e rilevandone il file interno di conseguenza... è giusto? Ovvero, se non lo trova nella vera directory, allora lo cerca all'interno di se stesso ?
Stà cosa sembra più un'anomalia che una cosa voluta, ma ad ogni modo se funziona è la benvenuta, perchè con questo giochetto si potrebbero fare delle belle cosette....
-
Ciao.
Spiego come posso :-)
COPY "mybin/feed" TO sTmpBin
All'interno della cartella del progetto ho creato la
cartella "mybin". Dentro "mybin" c'è l'eseguibile "feed".
Comunque quando aprirai il progetto nell'IDE, tutto sarà chiaro.
Bisogna però sempre usare COPY, cioè estrarre il file d'interesse dall'eseguibile Gambas, nel caso di binari da eseguire con SHELL o EXEC. Se per esempio
mettessi il comando:
SHELL "mybin/feed" WAIT
non funzionerebbe. Una volta chiesi a Benoit il perché di questo
comportamento. Adesso andrò a spulciare gli archivi per vedere se ritrovo la risposta esatta, ma mi pare di ricordare che mi rispose che l'eseguibile diventa
una specie di filesystem (più o meno) con tutte le cartelle del progetto
al loro posto. Quindi se cerco "mybin/feed" Gambas lo cerca in pratica dentro "eseguibilegambas/mybin/feed". Dentro "mybin" ci posso mettere
tutti i file che voglio.
A livello IDE, invece dovrei dargli il percorso
assoluto con Application.Path &/ "mybin/feed"
SHELL Application.Path &/ "mybin/feed" WAIT
funziona nell'IDE, ma una volta compilato non va più bene,
a meno che non esista un file "mybin/feed" dove stai eseguendo l'eseguibile Gambas.
In fine, pare che il dovere di estrarre il file valga solo per SHELL e EXEC.
Infatti con altri file non c'è bisogno di estrarli per visualizzarli o usarli, ma questo sicuramente lo sai. Lo scrivo per scrupolo. Ad esempio nei
miei progetti metto sempre una cartella "icone" se mi servono icone particolari,
una "docs" per le licenze.
Se nella cartella "docs" metto la licenza GNU-GPL.txt, mi basta fare
TextArea1.Text = file.load("docs/GNU-GPL.txt")
Chiudo avvertendo che magari l'eseguibile "feed" che ho incluso nel progetto,
potrebbe anche non andare bene nel tuo sistema (glibc diverse o altre dipendenze).
Nel caso, una volta compilato il progetto e lanciato dovresti vedere questo messaggio in console:
Usage:
feed input output widthxheight(in) rgb24|yuv420p
example: feed /dev/video0 /dev/video1 352x288 yuv420p
Saluti.
-
Bisogna però sempre usare COPY, cioè estrarre il file d'interesse dall'eseguibile Gambas, nel caso di binari da eseguire con SHELL o EXEC.
Aggiungo: non solo i binari inglobati, ma anche gli script inglobati.
Insomma, bisogna usare COPY per tutti quei file inglobati nell'eseguibile che vogliamo lanciare con SHELL o EXEC.
Saluti
-
Hai fatto un esempio corretto con le immagini...
In genere, un'applicazione gestisce icone o immagini (vedi menu), che normalmente metti in una sotto cartella (es. /images); quando crei l'eseguibile, si è notato che gambas include tutto quello che si trova dentro la cartella del progetto, incluse le sottocartelle. Ovviamente questo incrementa le dimensioni finali dell'eseguibile ma, finora, pensavo che questo fosse un errore...
Da quanto mi dici, invece la cosa diventa sicuramente un vantaggio, perchè alla fine potresti avere tutto in un singolo file, eliminando cartelle ecc., che potrebbero essere cancellate per errore.
Se mettiamo che si voglia caricare l'immagine della form About dell'applicazione...
Dato che l'eseguibile si è inglobata anche questa immagine, secondo quello che affermi, basterebbe eseguire una COPY TO , per avere a disposizione l'immagine su disco, per poi caricarla con load.
E' corretto quello che dico?
-
md9327 ha scritto:
Hai fatto un esempio corretto con le immagini...
In genere, un'applicazione gestisce icone o immagini (vedi menu), che normalmente metti in una sotto cartella (es. /images); quando crei l'eseguibile, si è notato che gambas include tutto quello che si trova dentro la cartella del progetto, incluse le sottocartelle. Ovviamente questo incrementa le dimensioni finali dell'eseguibile ma, finora, pensavo che questo fosse un errore...
Da quanto mi dici, invece la cosa diventa sicuramente un vantaggio, perchè alla fine potresti avere tutto in un singolo file, eliminando cartelle ecc., che potrebbero essere cancellate per errore.
Se mettiamo che si voglia caricare l'immagine della form About dell'applicazione...
Dato che l'eseguibile si è inglobata anche questa immagine, secondo quello che affermi, basterebbe eseguire una COPY TO , per avere a disposizione l'immagine su disco, per poi caricarla con load.
E' corretto quello che dico?
Sì è corretto.
-
EDIT:
Sì è corretto, anche se non capisco l'esempio che hai fatto. Perché non fare:
ME.Picture = picture["images/immagine"]
che senso ha tirarla fuori dall'eseguibile e poi caricarla?
Sicuramente c'è un motivo che mi sfugge.
Saluti.
-
Il motivo è semplice, le funzioni di libreria non vedono quello che è presente all'interno dell'eseguibile, e quindi è necessario copiarla su una cartella reale del sistema operativo.
Il metodo Load dell'oggetto Picture, necessita di vedere dove andare a prendere il file, ma questo non deve trovarsi all'interno di un'altro; è come se volessi leggere un file all'interno di uno zip, devi prima estrarlo. Questo lo fà normalmente, ad esempio, konqueror che estrae prima i file nella temp del sistema, poi te li fà vedere.
A suo tempo avevo tentato di fare una cosa simile in Gambas, ma non avevo sperimentato il semplice comando COPY, per cui non riuscivo... Grazie alla dritta di Giulio, la cosa apre orizzonti molto simpatici...
Ciao
-
Il motivo è semplice, le funzioni di libreria non vedono quello che è presente all'interno dell'eseguibile, e quindi è necessario copiarla su una cartella reale del sistema operativo.
funziona il metodo
me.picture=picture.load("immagini/immagine.png")
io lo uso da sempre