Lire une *.dll fortran dans Visual Basic 6.0

LFEMEDM Messages postés 5 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 18 septembre 2008 - 30 juil. 2008 à 23:24
cs_A20 Messages postés 2 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 24 août 2010 - 23 août 2010 à 18:37
Bonne nuit à tous les membres CodeS-SourceS<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>






 






(1) Je n’arrive pas à lire une *.dll construite avec le Compaq Visual Fortran Professional Edition for Win32x86 Systems Version 6.6A quand j’utilise le Microsoft Visual Basic 6.0.






 






(2) J’ai suivit toutes les notes de l’Help du Compaq Visual Fortran sur le sujet comme par exemple l’aide «Visual Basic with Visual Fortran DLL» et l’exemple qui l’accompagne.






 






(3) Quand j’actionne l’exécutable du VB il apparaît un message disant





Run-time error ‘53’, File not found : e:\myprojects\fcall\debug\fcall.dll.






 






(4) Après diverse tentative pour comprendre comment faire pour dépassé l’erreur ‘53’ j’ai alors suivis l’aide


«Visual Basic Debugging Consideratio
ns» qui dit le suivant:






 








Visual Basic Error 53
: File not found: yy.dll





If you get the error message "File not found: yy.dll" when you run the Visual Basic application, check the following:





If you built the DLL on one system and copied it to another, did you also copy the Fortran run-time DLLs?





These files are DFORRT.DLL, DFORMD.DLL, and MSVCRT.DLL on the Visual Fortran CD-ROM. They can be freely distributed with your application (see Compaq Visual Fortran Installing and Getting Started).






  Is the correct path to yy.dll specified in the Basic declaration?





Carefully check the path and file name in the Visual Basic
Declare

statement.






 






et je n’arrive pas à comprendre l’histoire des fichiers
DFORRT.DLL, DFORMD.DLL, et MSVCRT.DLL.






 






(5) L’installation du Compaq Visual Fortran est complète et les 3 fichiers habite à





c:\program files\microsoft visual studio\common\msdev98\bin









 






(6) Pouvez vous me dire qu’est que je suis en train de faire de mal?






 






(7) Merci beaucoup à bientôt,






 






LFEMEDM

9 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
31 juil. 2008 à 03:51
salut,

comment est déclarée ta dll?
qu'est que çà donne en mettant la dll dans le répertoire de ton appli, les 3 autres dans system32 et reboot ?

Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
0
LFEMEDM Messages postés 5 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 18 septembre 2008
31 juil. 2008 à 12:18
Bonjour<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>






 






(1) Pour l’instant j’ai à peine suivit l’exemple.






 






(2) Dans le Compaq Visual Fortran 6.6A le code est le suivant :






 






SUBROUTINE FortranCall (r1, num)






 







 ! Specify that the routine name is to be made available to callers of the






 ! DLL and that the external name should not have any prefix or suffix






 







 !DEC$ATTRIBUTES DLLEXPORT :: FortranCall






 !DEC$ ATTRIBUTES ALIAS:'FortranCall' :: FortranCall






 







   ! dformd.dll






   ! dforrt.dll






   ! msvcrt.dll






  








  








   REAL,INTENT(IN) :: r1           ! Input argument






 
 

REAL,INTENT(OUT) :: num






 







   num = MOD (r1, 256.0)






 







 

END SUBROUTINE









 






et dans le Microsoft Visual Basic 6.0 sur la fenêtre «Project1 – Form1 (Code)»






 






Private Sub Command1_Click()






   r1 = 456.78






   Call FortranCall(r1, Num)






   Text1.Text = Str$(Num)





End Sub






 






Private Sub Command2_Click()





End





End Sub









 






et sur la fenêtre «Project1 – Module1 (code)»






 






Declare Sub FortranCall Lib "e:\myprojects\fcall\debug\FCALL.dll" (ByRef r1 As Single, ByRef Num As Single)






 






ou alors sans ‘ByRef’ (ça ne fonctionne pas dés deux forme)






 






Declare Sub FortranCall Lib "e:\myprojects\fcall\debug\FCALL.dll" (r1 As Single, Num As Single)






 






(3) Effectivement les fichiers
DFORRT.DLL, DFORMD.DLL et MSVCRT.DLL habite aussi à c:\windows\system32









 






(4) Mètre dans l’application FCALL.dll avec la déclaration





Declare Sub FortranCall Lib "FCALL.dll" (ByRef r1 As Single, ByRef Num As Single)








ne donne rien !






 






Je vous remercie pour l’attention, au revoir, LFEMEDM.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
31 juil. 2008 à 13:01
 !DEC$ATTRIBUTES DLLEXPORT :: FortranCall









 !DEC$ ATTRIBUTES ALIAS:'FortranCall' :: FortranCall









   REAL,INTENT(IN) :: r1           ! Input argument








 
 

REAL,INTENT(OUT) :: num




IN, et OUT, çà laisse penser à une déclaration comme :

Declare Function FortranCall Lib "FCALL.dll" (ByVal r1 As Single) As Single

à tenter..

celà dit çà ne concerne pas ton message d'erreur pour autant
DLL introuvable concerne le chemin qui n'est pas bon
essaye aussi de mettre FCALL dans SYSTEM32 puis reboot

puis si erreur, précise, car ne donne rien ne nous dit pas si c'est la même erreur :)
++
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
0
LFEMEDM Messages postés 5 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 18 septembre 2008
31 juil. 2008 à 15:14
Bonjour,<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>






 






(1) Plaçant FCALL.dll dans system32 et "rebootant" (
FCALL.dll aussi dans le répertoire du vb
)






 






(2) Si je fais






Declare Function FortranCall Lib "FCALL.dll" (ByVal r1 As Single) As Single






l’erreur est: «Compile error: Wrong number of arguments or invalid property assignment»






 






(3) Si je laisse, comme avant,






Declare Sub FortranCall Lib "FCALL.dll" (r1 As Single, Num As Single)






l’erreur est : «Run-time error ‘53’, File not found : fcall.dll»






 






(4) Il y a t’il quelqu'un qui l’à réussi ?






 






(5) J’arrive à lire une *.dll faite en fortran avec le fortran mais pas avec le VB pourquoi ?










Merci beaucoup, LFEMEDM
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
31 juil. 2008 à 18:16
es-tu sûr de la casse?

et la doc fortran garantie que la dll soit bien utilisable en VB6?
une ligne du genre.... !DEC$ATTRIBUTES STDCALL,REFERENCE:: FORTRANCALL

++
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
0
LFEMEDM Messages postés 5 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 18 septembre 2008
9 sept. 2008 à 23:36
Boujour,

VB6 reussi à lire les *.dll faite en FORTRAN. J'ai reussi à resoudre le probleme.
Merci beaucoup à tous pour les encoragement!
LFEMEDM
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
9 sept. 2008 à 23:41
n'hésite pas à indiquer la démarche détaillée, pour les autres lecteurs
0
LFEMEDM Messages postés 5 Date d'inscription mardi 29 juillet 2008 Statut Membre Dernière intervention 18 septembre 2008
18 sept. 2008 à 20:22
Bonjours<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>






 






Je m’excuse de ne l’avoir pas fait plus tôt et évidement j’ai tous le plaisir de concéder les routines qui permette de lire les *.dll du CVF dans le VB6.

 
<hr />








(1) Dans le générale les lignes écrite antérieurement été bien, cependant je les ai laissé tombé (comme je l’avais déjà dit elles sont d’un exemple que je n’ai pas compris) et j’ai fais mon propre exemple qui fonctionne bien, l’erreur 53 est partie !






 






(2) Ainsi la *.dll du CVF (Projects : Fortran Dynamic Link Library ; Files : Fortran Free Format Source File) est:






 







 


SUBROUTINE SUB_MATRIX_A(MATRIXA,M)








               

!DEC$ ATTRIBUTES DLLEXPORT, ALIAS : "SUB_MATRIX_A" :: SUB_MATRIX_A








                IMPLICIT NONE








                INTEGER i,j,M,n








                REAL*8 MATRIXA(M,M)








               

N = M








                DO i = 1, M








                               DO j = 1, N








                                               MATRIXA(i,j) = 0.0








                               END DO








                END DO








                DO i = 1, M








                               DO j = 1, N








                                              

MATRIXA(i,j) = 100.0*i








                               END DO








                END DO







END SUBROUTINE







 






Après cliquer "Compile" et "Build" le CVF fournis dans le classeur "Debug" les fichiers :





(a)
ProjSolutionA.dll ;





(b) ProjSolutionA.exp ;





(c) ProjSolutionA.lib ;





(d) DF60.PDB ;





(e) FileSolutionA.obj ;





(f) ProjSolutionA.obj ;





(g) ProjSolutionA.pdb.





Emmené à peine la *.dll qui s’appel
ProjSolutionA.dll 
dans le classeur du VB6 ou est classer Project1.vbp










(3) la Form1 du VB6 est:






 







Option Explicit








 







Private Sub Command1_Click()







Dim i%







Dim j%







Dim M%







Dim N%







Dim MATRIXA() As Double








 







M = 3







N = M








 







Text17.Text = M + 1







Text18.Text = N + 1








 







ReDim MATRIXA(M, N)








 







Call SUB_MATRIX_A(MATRIXA(0, 0), M + 1)








 







Text1.Text = MATRIXA(0, 0)







Text2.Text = MATRIXA(1, 0)







Text3.Text = MATRIXA(2, 0)







Text4.Text = MATRIXA(3, 0)








 







Text5.Text = MATRIXA(0, 1)







Text6.Text = MATRIXA(1, 1)







Text7.Text = MATRIXA(2, 1)







Text8.Text = MATRIXA(3, 1)








 







Text9.Text = MATRIXA(0, 2)







Text10.Text = MATRIXA(1, 2)







Text11.Text = MATRIXA(2, 2)







Text12.Text = MATRIXA(3, 2)








 







Text13.Text = MATRIXA(0, 3)







Text14.Text = MATRIXA(1, 3)







Text15.Text = MATRIXA(2, 3)







Text16.Text = MATRIXA(3, 3)








 







End Sub







Private Sub Command2_Click()







End







End Sub










 






(4) avec le Module1 du VB6






 







Option Explicit







Declare Sub SUB_MATRIX_A Lib "ProjSolutionA.dll" (ByRef MATRIXA As Double, ByRef M As Long)














<hr />





Um merci très spécial pour PCPT,
Au revoir,
LFEMEDM
0
cs_A20 Messages postés 2 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 24 août 2010
23 août 2010 à 18:37
merci pour ces explications bien détallé ça ma aider ...
mais lorsque je compile mon programme il m'envoie cette erreur "NomDLL.dll intriuvable".
N.B: j'ai mets NomDLL.dll avec mon projet vb
0
Rejoignez-nous