|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 1
|
[Fortran] Usare Dll
Ciao a tutti, sono nuovo del forum.
Ho questo problema, ho creato una dll in Fortran e vorrei richiamarla ma ottengo sempre un errore: "Access Violation" Sorgente della Dll: Codice:
Real Function Somma (A ,B, Res)
!DEC$ATTRIBUTES STDCALL:: Somma
!DEC$ATTRIBUTES DLLEXPORT:: Somma
!DEC$ATTRIBUTES ALIAS: 'Somma':: Somma
!DEC$ATTRIBUTES REFERENCE:: A ,B, Res
Real*8 A ,B, Res
Real Errore
IF ((A>=0) .AND. (B>=0)) THEN
! Qui è tutto ok
Errore = 0
Res = A + B
ELSE
! Qui c'è un errore
IF ((A<0) .AND. (B<0)) THEN
Errore = 1.
ELSEIF (A<0) THEN
Errore = 2.
ELSE
Errore = 3.
END IF
END IF
! Qui la funzione comunica se ha trovato
! qualche errore
Somma = Errore
End Function
Codice:
Program UsaSomma
Interface
Real Function Somma(x,y,z)
!DEC$ ATTRIBUTES DLLIMPORT :: Somma
!DEC$ ATTRIBUTES STDCALL :: Somma
!DEC$ ATTRIBUTES ALIAS: "Somma" :: Somma
Real*8 x
Real*8 y
Real*8 z
End Function Somma
End Interface
Real*8 a,b,c
Real errore2
a=5.3
b=3.4
c=0.0
errore2 = Somma(a,b,c)
print *,'Risultato:', c
print *, 'Codice Errore:', errore2
read (*,*)
End
Nel debug ho visto che quando dall'eseguibile passa alla dll i valori degli argomenti nella dll (A,B,Res) sono tutti: "Undefined address" (non posso neppure cambiare il valore della variabile all'interno del debug) Il compilatore è Visual Fortran 6.0.0 Se qualcuno ha qualche suggerimento è il benvenuto! Sono sicuro che mi manca un pezzetto indispensabile... |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Jan 2005
Messaggi: 157
|
ho provato i tuoi codici con il gfortran senza problemi
# Compilo la dll gfortran prova.f90 -shared -oprova.dll # Compilo il main gfortran main.f90 prova.dll -omain.exe >main.exe Risultato: 8.7000002861022949 Codice Errore: 0.0000000 Secondo me stai facendo confusione con le istruzioni per esportare i nomi sotto il CVF, ti consiglio di compilare da riga di comando usando il comando DF. Oltretutto secondo me non ti servono tutte quelle direttive per il compilatore. Non ho il CVF su questa macchina per cui non posso provare. In ogni caso ti consiglio di passare al gfortran che è gratis. Il CVF 6.0 è oramai obsoleto e pieno di bachi, se poi hai dei soldini da spendere puoi aggiornarti e prendere il compilatore Intel. ciao tiMo
__________________
The plural of anecdote is not data. ~ Roger Brinner |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:20.



















