allex (Normal User)
Newbie
Messaggi: 4
Iscritto: 05/01/2012
|
salve a tutti mi sono iscritto oggi del linguaggio pascal so abbastanza... ma ho un problema nel creare il tipo di programma che ho messo nel titolo, vi spiego il funzionamento di esso: quando digiti la parola es:'addizione' il programma deve utilizzare la dll che ho creato per eseguire l' operazione, in pratica io non so come devo importarla nel programma e specialmente in quale parte del programma devo scrivere la funzione che mi permetta di fare ciò.
ecco il codice sorgente della dll:
Codice sorgente - presumibilmente Delphi |
library addizione; uses crt; var add1,add2,add3,add4,somma:real; n_add:integer; begin clrscr; writeln('scrivi numero addendi'); readln(n_add); if n_add>=2 then begin writeln('scrivi valore primo addendo'); readln(add1); writeln('scrivi valore secondo addendo'); readln(add2); somma:=(add1+add2); writeln('ecco la somma'); writeln(somma:6:2); repeat until keypressed; end; if n_add>=3 then begin writeln('scrivi valore primo addendo'); readln(add1); writeln('scrivi valore secondo addendo'); readln(add2); writeln('scrivi valore terzo addendo'); readln(add3); somma:=(add1+add2+add3); writeln('ecco la somma'); writeln(somma:6:2); repeat until keypressed; end; if n_add>=4 then begin writeln('scrivi valore primo addendo'); readln(add1); writeln('scrivi valore secondo addendo'); readln(add2); writeln('scrivi valore terzo addendo'); readln(add3); writeln('scrivi valore quarto addendo'); readln(add4); somma:=(add1+add2+add3+add4); writeln('ecco la somma'); writeln(somma:6:2); repeat until keypressed; end else writeln('il numero massimo di addedndi è 4'); end. end.
|
ma nella compilazione della dll nn ci sono problemi, gli errori li riscontro nell' eseguibile:
Codice sorgente - presumibilmente Delphi |
program calcolatrice; uses crt; var t_operazione:string [10]; begin clrscr; writeln('scrivi il tipo di operazione che vuoi effettuare'); readln(t_operazione); if t_operazione>=addizione then; export external ('addizione.dll');
|
chiaramente devo ancora finire il mio eseguibile, ma credo che questa parte di codice basti a far capire il funzionamento del mio programma.
spero di essere stato chiaro e di nn aver dato l' impressione di un' ignorante.
Ultima modifica effettuata da Phi il 23/01/2012 alle 23:21 |
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
|
|
allex (Normal User)
Newbie
Messaggi: 4
Iscritto: 05/01/2012
|
la dll l' ho già creata, ma nn so come "collegarla" all' eseguibile, che tramite l' istruzione di controllo if, then, else dovrà accedere alla dll ed eseguire le istruzioni di essa...
javascript:addsmile('')
|
|
()
Newbie
Messaggi:
Iscritto:
|
insieme alla dll dovresti aver creato un' altro file, quello lo metti assieme alle librerie statiche (mi scuso se non è il termine adeguato ma l' idea è questa) e dopo uses del programma che deve utilizzare la tua dll metti il nome della tua unit. Stavi cercando questo?
|
|
allex (Normal User)
Newbie
Messaggi: 4
Iscritto: 05/01/2012
|
si... più o meno... sto cominciando a capire come fare, poi ho trovato su questo sito ho trovato, nella guida pascal ho trovato una pagina che spiga il funzionamento dell' istruzione external...
grazie mille
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Postato originariamente da allex:
la dll l' ho già creata, ma nn so come "collegarla" all' eseguibile, che tramite l' istruzione di controllo if, then, else dovrà accedere alla dll ed eseguire le istruzioni di essa...
javascript:addsmile('') |
Quello che hai scritto nella libreria non è utilizzabile perché non ci sono funzioni o procedure, a cui fare riferimento.
Le librerie a collegameto dinamico sono dei "contenitori" che archiviano una o più funzioni. Queste librerie possono essere collegate con più programmi contemporaneamente risparmiando spazio sulla memoria centrale.
Grazie alle librerie a collegamento dinamico si può evitare di inserire delle funzioni uguali in più programmi, in modo da risparmiare spazio sulla RAM.
Ecco la sintassi:
Codice sorgente - presumibilmente Delphi |
library nome; procedure nome_funz; export; var ........; begin //istruzioni; end; //si possono inserire quante procedure o funzioni vogliamo exports nome_funz,.......; begin end.
|
Da notare che dopo il nome della procedura si inserisce l'opzione EXPORT. Alla fine tutti i nomi delle procedure vanno messi nella direttiva EXPORTS per essere esportate.
Per richiamare una dll in un programma su usa la seguente sintassi:
program test_dll;
Codice sorgente - presumibilmente Pascal |
procedure nome_funz; external 'nome.dll'; begin nome_funz; end.
|
Ultima modifica effettuata da Poggi Marco il 05/01/2012 alle 22:07 |
|
allex (Normal User)
Newbie
Messaggi: 4
Iscritto: 05/01/2012
|
ah!! ho capito grazie mille a tutti e due, su google non avrei mai trovato due spiegazioni cosi chiare!
|
|
()
Newbie
Messaggi:
Iscritto:
|
Bravo poggi bela spiegazione, io pensavo ai problemi con le librerie statiche e dinamiche in C dato che mi danno problemi un giorno si e l' altro anche O.o
|
|