Oppure

Loading
05/01/12 10:13
allex
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:

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:

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 23/01/12 22:21
aaa
05/01/12 13:26
Poggi Marco
Ciao e benvenuto sul form!

Il modo più semplice per risolvere il problema, a mio avviso, è di implementare un' unita in cui inserire le funzioni.
Ecco come fare: pierotofy.it/pages/guide/Guida_Pascal/Scrivere_una_libreria/
Qui c' è anche un esempio: pierotofy.it/pages/guide/Guida_Pascal/Esercizi_sul_capitolo_17/
aaa
05/01/12 15:27
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(':pat:')
aaa
05/01/12 16:10
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?
05/01/12 20:22
allex
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
aaa
05/01/12 20:34
Poggi Marco
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(':pat:')


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:
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;

procedure nome_funz; external 'nome.dll';
 
begin
 
nome_funz;
 
end.


Ultima modifica effettuata da Poggi Marco 05/01/12 21:07
aaa
06/01/12 7:57
allex
ah!! ho capito grazie mille a tutti e due, su google non avrei mai trovato due spiegazioni cosi chiare!
aaa
06/01/12 21:43
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