knulp77
03-07-2008, 15:16
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:
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
Sorgente del programma che dovrebbe richiamare la dll
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
All'interno del workspace ho caricato il file .lib creato insieme alla dll e la dll l'ho copiata nella cartella del progetto.
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...
Ho questo problema, ho creato una dll in Fortran e vorrei richiamarla ma ottengo sempre un errore: "Access Violation"
Sorgente della Dll:
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
Sorgente del programma che dovrebbe richiamare la dll
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
All'interno del workspace ho caricato il file .lib creato insieme alla dll e la dll l'ho copiata nella cartella del progetto.
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...