|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Mar 2007
Messaggi: 36
|
[FORTRAN]creare e richiamare una Dll
ragazzi volevo sapere come si crea e si richiama una Dll,io uso il compaq visula fortran 6.....qualcuno sa dirmi come si fa?
a che cosa servono le cdecl ? |
![]() |
![]() |
![]() |
#2 | |
Member
Iscritto dal: Jan 2005
Messaggi: 157
|
Quote:
la chiave cdecl e le direttive di compilazione CDEC$ sono usate per gestire l'esportazione di nomi di subroutines dal fortran al C o verso altri linguaggi in programmi misti (ad es. Fortran + C). ciao tiMo
__________________
The plural of anecdote is not data. ~ Roger Brinner |
|
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Mar 2007
Messaggi: 36
|
sono riuscito a fare una DLL,adesso vorrei capire come faccio a mettere una SUBROUTINE dentro la mia DLL?
|
![]() |
![]() |
![]() |
#4 | |
Member
Iscritto dal: Jan 2005
Messaggi: 157
|
Quote:
vabbe' va... ![]() i passi sono: 1. scrivi una subroutine e salvala in un file, diciamo pippo.f90 2. compila con df pippo.f90 /dll /LINK /RELEASE ti crea un file pippo.dll e pippo.lib 3. per usare la subroutine in un altro programma, diciamo prog.f90 df prog.f90 pippo.lib /LINK /RELEASE ciao tiMo
__________________
The plural of anecdote is not data. ~ Roger Brinner |
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Mar 2007
Messaggi: 36
|
grazie mille per la tua risposta.
Quello che volevo sapere è come inserire un subroutine dentro una DLL,ti dico quello che devo fare...con Dependency Walker,riesco a vedere le librerie,in particolare quelle del programma che devo sviluppare. Allora la libreria che mi interessa si chiama SELub.DLL,dentro questa libreria vedo che ci sono tre subroutine,come faccio a mettere dentro quella DLL la mia nuova subroutine. SE faccio una nuova subroutine e salvo il tutto in un file .for poi compilo ed poi build,alla fine mi esce l'error LINK 2001 external symbol _MAIN_,questo problema riesco a risolvere aggiungendo al progetto una libreria,ma adesso mi da nuovo errore :fatal error LINk1104 cannot open file " SELub.DLL" Spero di essere stato chiaro,qualcuno sa darmi una mano |
![]() |
![]() |
![]() |
#6 | ||
Member
Iscritto dal: Jan 2005
Messaggi: 157
|
Quote:
Quote:
ciao tiMo
__________________
The plural of anecdote is not data. ~ Roger Brinner |
||
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Mar 2007
Messaggi: 36
|
cos'è il codice sorgete?
questo il mio codice del programma SB0004.for INCLUDE 'sb0004.h' SUBROUTINE SB0004(IN,OUT,IP,RP,DP,BP,SP) IMPLICIT NONE CHARACTER*80 BNAMES INTEGER INMIN,INS,OUTS,IPS,RPS,DPS,BPMIN,BPS,SPMIN,SPS, & GROUP,OPM PARAMETER (BNAMES = 'MYPROD' &, OPM = 1 &, INMIN = 2 &, INS = 2 &, OUTS = 1 &, IPS = 10 &, RPS = 0 &, DPS = 0 &, BPMIN = 0 &, BPS = 0 &, SPMIN = 0 &, SPS = 0 &, GROUP = 3) CHARACTER*80 SP(SPS+1) DOUBLE PRECISION DP(DPS+1) INTEGER IP(IPS+1) REAL IN(INS+1),OUT(OUTS+1),RP(RPS+1),BP(BPS+1) C----------------------------------------------------------------------- IF (IP(2) .NE. 0) THEN IF (IP(2) .EQ. -1) THEN C Identification call CALL ID(IN,OUT,IP,RP,DP,BP,SP,BNAMES, & OPM,INMIN,INS,OUTS,IPS,RPS,DPS,BPMIN,BPS,SPMIN,SPS,GROUP) ELSE IF (IP(2) .EQ. 1) THEN C Constructor call ELSE C Destructor call END IF RETURN END IF C---- Standard call ---------------------------------------------------- OUT(1) = IN(1) * IN(2) RETURN END il file Sb0004.h è un file di teso che mi esporta la subroutine SB0004,con le cosidette calling convetion. Compilo ed è tutto ok,quando faccio build mi da il seguente errore: fatal error LINK 1104 cannot open file " selub.lib " Questa SELUB.DLL è una libreria del mio programma da sviluppare. io ho letto dal manuale che per collegare una libreria con il progetto bisogna andare su setting di CVS e aggiungere la libreria. |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 5981
|
|
![]() |
![]() |
![]() |
#9 |
Member
Iscritto dal: Mar 2007
Messaggi: 36
|
|
![]() |
![]() |
![]() |
#10 | |
Member
Iscritto dal: Jan 2005
Messaggi: 157
|
Quote:
ti ho ha spiegato nel mio post precedente come fare a includere una libreria dll e ti ho anche suggerito di passare alla modalita' command line per compilare, almeno fintanto che non ci capisci qualcosa in piu' sull'interfaccia grafica. Ho visto che la tua sub ne chiama un'altra. Se ID e' su una libreria a parte forse avrai bisogno di un'interfaccia o anche di dichiararla come EXTERNAL (vedi manuale).
__________________
The plural of anecdote is not data. ~ Roger Brinner |
|
![]() |
![]() |
![]() |
#11 |
Member
Iscritto dal: Mar 2007
Messaggi: 36
|
si, ID è una funzione che sta su un 'altra libreria,che io riesco a collegare tramite la funzione settings-->link-->input e poi digito la mia libreria da aggiungere,da collegare.Infatti dentro il mio progetto,io trovo quella libreria,se nn facessi cosi mi darebbe errore di link.
Il mio problema sta nel fatto che io devo mettere la mia nuova funzione dentro la libreria selUB.DLL,altrimenti nn collego la mia funzione col programma.Perchè quella è la DLL che mi permette di collegare la mia nuova funzione con il programma.Cioe dentro la libreria ci sono 3 funzioni ne posso aggiungere una quarta?Come si fa? Scusami ma nn riesco a capire come faccio a incluere una nuova libreria dalla linea di comando,potresti farmi un esempio. |
![]() |
![]() |
![]() |
#12 | ||
Member
Iscritto dal: Jan 2005
Messaggi: 157
|
Quote:
Quote:
__________________
The plural of anecdote is not data. ~ Roger Brinner |
||
![]() |
![]() |
![]() |
#13 |
Member
Iscritto dal: Mar 2007
Messaggi: 36
|
l'unico mezzo che ho per interfacciare,collegare,mettere dentro il mio programma la nuova funzione che creo(ad esmpio,io voglio inserire una moltiplicazione A*B) è quella di inserlirla nella SelUb.dll......se io nn metto dentro la mia funzione dentro quella specifica libreria,il programma che voglio sviluppare che si chiama SEL,nn vede la mia nuova funzione.Sul manuale del programma SEL ,ho letto che quella libreria ti collega il tuo nuovo blocco che fai (ad esempio,un blocco che fa una moltiplicazione) al programma,in modo che tu puoi richiamarla e farla funzionare.
Se io faccio una nuova DLL,nn mi serve tanto,una cosa che potrei fare e forse è quello che dici tu,potrei aggiungere alla mia nuova libreria la SelUB.DLL,che è quelle che mi serve,ma quando faccio questa operazione mi dà l'errore LINK 1104,cioe nn riesce trovare questa libreria SelUb.lib,questa libreria esiste e il percosro che gli do è giusto.L'unica cosa che mi viene da pensare e che questa libreria si bloccata,Puo essere?Cioe devo farmi dare dei codici da quelli che hanno sviluppato il programma SEL? |
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 5981
|
Quote:
![]() Ogni applicazione ha il suo codice sorgente, ovvero le righe di istruzioni in un determinato linguaggio usate per crearla. Ultima modifica di Unrue : 21-02-2008 alle 13:16. |
|
![]() |
![]() |
![]() |
#15 | |
Member
Iscritto dal: Jan 2005
Messaggi: 157
|
Quote:
sei proprio sicuro che il main non veda la tua nuova funzione? Se hai accesso al main non dovresti avere problemi a fargliela vedere.
__________________
The plural of anecdote is not data. ~ Roger Brinner |
|
![]() |
![]() |
![]() |
#16 |
Member
Iscritto dal: Mar 2007
Messaggi: 36
|
dentro la libreria che mi creo,certo che vedo la mia funzione.....ma il problema sta che io devo vederla dentro la libreria selUB.DLL,solo in questo modo riesco a risolvere il mio problema.
|
![]() |
![]() |
![]() |
#17 |
Member
Iscritto dal: Mar 2007
Messaggi: 36
|
ho risolto il mio problema
![]() ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:54.