IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

écrire dll en fortran-combiner fortran et vb.net


Sujet :

Fortran

  1. #1
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Par défaut écrire dll en fortran-combiner fortran et vb.net
    salut tous le monde
    merci de m'aider a résoudre mon problème, c'est urgent
    Résumé:
    j'ai développer un programme en fortran, mais j'ai prit la décision de travailler avec vb.net, maintenant je veux convertir mon programme de fortran en vb.net mais je me renseigné qu'on peut combiner ces deux langage.

    Objectif global:
    Utiliser un code (fonctions et sous-programmes) écrit sous Compaq Visual Fortran Version 6.6 en vb.net 2008

    Objectif global:
    écrire une dll en fortran
    lier cette dll en vb.net
    exploiter ces procédure et ces fonction par un programme en vb.net

    méthodologie:
    c'est ce que je cherche

    merci d'avance

  2. #2
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Par défaut
    voici un exemple :
    1)écrire une dll avec compaq visual fortran, pour cela (Projects : Fortran Dynamic Link Library ; Files : Fortran Free Format Source File)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SUBROUTINE SUB_MATRIX_A(a,b,c)
     
     
                    IMPLICIT NONE
     
                    INTEGER a,b,c
     
                    a=b+c
     
    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.pdb.

    Emmené la *.dll qui s'appel ProjSolutionA.dll dans le dossier où ce trouve ton .exe généralement (\bin)

    2)code en vb.net
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Friend Class Form1
    	Inherits System.Windows.Forms.Form
        Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
            Dim b, a, cf As Integer
            b = Val(Text1.Text)
            cf = Val(Text2.Text)
            Call SUB_MATRIX_A(a, b, cf)
            Text3.Text = a
        End Sub

    3)Creer un module avec vb.net "module1" et mettre ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Module Module1
     
        Declare Sub SUB_MATRIX_A Lib "ProjSolutionA.dll" (ByRef a As Integer, ByRef b As Integer, ByRef c As Integer)
    End Module

    et c'est tout

  3. #3
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut APPELER UNE DLL FORTRAN A PARIR DE VB.NET
    Voici un exemple complet avec differents types de base cree avec le compilateur Fortran Silverfrost FNT95 ver5.4 & vb.net VS 2008.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
     
    !  Silverfrost FTN95 for Microsoft Visual Studio
    !  Free Format FTN95 Source File
    !  --------------------------------------------------
    !Projet biblio  Fortran FNT95 de type "extension" 
    !ajouter une reference à fnt95lib.dll
     
       SUBROUTINE  TRAITEVBNET(EntierVB,ReelVB,ComplexeVB,strVB,tblDoubleVB,tblStrVB,tblStrVB2)
    !   declare l'inerface externe de la subroutine 
        ASSEMBLY_INTERFACE(NAME="TraiteVBNet")
     
        INTEGER,INTENT(INOUT):: EntierVB
        REAL*4 ,INTENT(INOUT):: ReelVB
        COMPLEX*8,INTENT(INOUT):: ComplexeVB
        REAL*8 ,INTENT(INOUT)::tblDoubleVB(:)
     
        OBJECT("System.String"),INTENT(INOUT) :: strVB
        OBJECT("System.String[]"),INTENT(OUT):: tblStrVB
        OBJECT("System.String[]"),INTENT(INOUT):: tblStrVB2
     
     
    !  Ici on change les valeurs des arguments simples recus
     
       EntierVB=45
       ReelVB=125.45
       ComplexeVB=(3.0,4.0)
       ComplexeVB=ComplexeVB**2
       strVB=NEW@("System.String","Bonjour VB.Net...")
     
    !  Ici on change les valeurs de l' argument tableau de type REAL  recu
       DO I=1,5
         tblDoubleVB(I)=750.15*I
       END DO  
     
    !  Ici on change les valeurs de l' argument tableau de type STRING  recu
     
    !  on initialise avec "New" le .Net Array (String est un classe  .NET FRAMEWORK)
    !  & on le dimensionne(commen en vb : tblStrVB=new(5){} )
    !  les index en vb.net pour les instance d'objet string sont en base =0 
     
       tblStrVB=NEW@("System.String[]",5)
       DO I=1,5
           tblStrVB(I-1)="Fortran.Net"
       END DO      
     
    !  Ici pas de "New"   ni dimensionement car le .Net Array a ete initialise dans VB.Net
    !  les index en vb.net pour les instance d'objet string sont en base =0 
     
       DO I=1,5
           tblStrVB2(I-1)="j'ai ete change par Fortran.Net"
       END DO       
       END SUBROUTINE  TRAITEVBNET
     
    !   NOTA BENE 1 :pour les types de base Integer, Real,Bool on n'a pas d'instruction "New" 
    !   parce que dans le .NET FRAMEWORK ils ne sont des pas des classes.
    !   ils n'ont pas d'interface collection(item,count,clone,etc...)
    !   NOTA BENE 2 :   Seul defaut du compil il ne prend pas en charge les collections du .net framework.Ainsi on ne peut pas utiliser
    !   un DataSet d'Ado.Net car on ne peut acceder à ses collections tables et leurs champs.
    !   Le cote database n'est pas pris en charge.Pour transmetre une collection il faut 
    !   la transferer dans un tableau d'objet & transmettre ce tableau .
    !   Ceci est frustrant.
     
     
    'Projet principal WinForm  VB.NET
    'ajouter une reference à fnt95lib.dll
    'ajouter une reference à votre fichier projet ForDLL.dll(fichier projet fortran) )
     
    'ajouter les controles TextBox suivants :  txtEntier ,txtReel,txtStr 
    'txtNbComplexeVB ,txtTblDouble,txtTblStr1 ,txtTblStr2
    'ajouter 2 controles Button:  btnSubFor,btnRaz
    '----------------------------------------------------------
     
    Imports System
    Imports System.Windows
    Imports Salford.Fortran
    Imports ForDLL
    Public Class frmDLLFor
        Dim entierVBNET As Integer
        Dim reelVBNET As Double
        Dim nbComplexeVB As Salford.Fortran.Complex8
        Dim strVBNET As String
        Dim tblDoubleVBNET(4) As Double
        Dim tblStrVBNET() As String
        Dim tblStrVBNET2() As String
     
        Public Sub New()
     
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
     
        End Sub
     
        Private Sub frmDLLFor_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            entierVBNET = 0
            reelVBNET = 0.0
            nbComplexeVB.Real = 0.0
            nbComplexeVB.Imaginary = 0.0
            strVBNET = ""
            For I As Integer = 0 To 4
                tblDoubleVBNET(I) = 0.0
            Next
            'le tableau tblStrVBNET() n'est pas initialisée en vb ni demensionne.
            'Il le sera dans Dll Fortran
            'le 2eme tableau sera initialise  et dimensione en vb.net
            txtTblStr2.Text = ""
            ReDim tblStrVBNET2(4)
            For I As Integer = 0 To 4
                tblStrVBNET2(I) = "Visual Basic.NET"
                txtTblStr2.Text = txtTblStr2.Text & tblStrVBNET2(I) & vbCrLf
            Next
        End Sub
        Private Sub btnSubFor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSubFor.Click
     
            'appel fortan dll
            Call ForDLL.TraiteVBNet(entierVBNET, reelVBNET, nbComplexeVB, strVBNET, tblDoubleVBNET, tblStrVBNET, tblStrVBNET2)
     
            'on affiche les resultats
            txtEntier.Text = entierVBNET
            txtReel.Text = reelVBNET
            txtStr.Text = strVBNET
            txtNbComplexeVB.Text = nbComplexeVB.Real.ToString & "+j" & nbComplexeVB.Imaginary.ToString
            For I As Integer = 0 To 4
                txtTblDouble.Text = txtTblDouble.Text & tblDoubleVBNET(I) & vbCrLf
            Next
            For I As Integer = 0 To 4
                txtTblStr.Text = txtTblStr.Text & tblStrVBNET(I) & vbCrLf
            Next
     
            For I As Integer = 0 To 4
                txtTblStr2.Text = txtTblStr2.Text & tblStrVBNET2(I) & vbCrLf
     
            Next
        End Sub
     
           Private Sub  btnRaz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRaz.Click
            txtEntier.Text = ""
            txtReel.Text = ""
            txtStr.Text = ""
            txtNbComplexeVB.Text = ""
            txtTblDouble.Text = ""
            txtTblStr.Text = ""
            'raz du 2eme tableau de chaine 
            txtTblStr2.Text = ""
            For I As Integer = 0 To 4
                tblStrVBNET2(I) = "Visual Basic.NET"
                txtTblStr2.Text = txtTblStr2.Text & tblStrVBNET2(I) & vbCrLf
            Next
        End Sub
    End Class
    bon courage fortraner

  4. #4
    Membre averti
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Par défaut
    merci beaucoup MABROUKI

    mais j'arrive pas a refaire votre exemple, je trouve pas dans mes références "fnt95lib.dll". le programme vb.net ne reconnait pas l'espace "Salford.Fortran" et "ForDLL" ainsi que le type "Salford.Fortran.Complex8"


    merci encours fois

  5. #5
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut vb.net et fortran
    bonjour brahim,
    tu dois telecharger Fortran Silverfrost FNT 95 5.4 Il est free.
    liens :
    http://download.cnet.com/Silverfrost...-10491439.html ou bien mediafire

    http://www.mediafire.com/file/yqvgng...5_personal.exe

    Apres installation tu vas sur About de VS 2008 tu dois le trouver dans la liste des compilateurs avec Visual Basic ,VC# si l'installation s'est deroule normalement.
    tu fais:
    1/Nouveau Projet VISUAL ->WINDOWS et tu cree solution et projet winAppVBFor sous VB avec le code fourni(verifie en haut version .Net 2).

    2/Nouveau Projet FNT95 Projects(au dessus de autres Types Projets) tu choisis le modele FNT95 Application Extension (un projet Dll).

    3/Dans ce projet fortran sur Reference (en dessous de source files) tu clique droite , tu choisi Add Reference et tu cliques.
    Navigue vers le repertoire ou tu as installe le compilateur (mettons SALFORD) ,ensuite navique vers le sous-dossier REDIST ou tu choisi :
    - fnt95lib.dll(c'est la librairie du NetFrameWork 2.0)
    tu ajoutes egalement une reference au fichier :
    - policy.1.0.ftn95lib.dll(a cause de la banniere pour version à usage personnel)

    4/dans le projet VB de demarrage tu ajoutes une reference
    - egalement au fichier ->fnt95lib.dll(elle te facilite l'affichage des nombres complexes en vb.net )
    - au projet fortran -> ForDLL

    6/ tu compiles d'abord le projet Fortran

    7/ Dans proprietes du projet demarrage VB tu choisis le chemin de sortie (build) de l'executable pour l'envoyer dans le sous dossier dllFor\Debug\NET\ForDll.dll (projet fortran).

    8/tu compiles ensuite le projet VB de demarrage

    9/ pour le deployement pour le package .msi:

    dans projet setup tu fais projet ->Ajouter Fichier :
    - le projet VB de demarrage
    - le projet dllFor

    plus les fichiers suivants :
    -salflibc.dll
    -ftn95lib.mdl
    -ftn95lib1.mdl

    ensuite tu cocher dans proprietes du projet setup :
    - net framework 2.0
    - msi ver 3.1

    C'est tout mais pour cela dare dare tu dois telecharger le compilateur.C'est formidable par rapport à Compilateur Digital Fortran parce que tu as l'interface graphique. Ensuite il est compatible .
    Il supporte le format Fixe et Libre.

    je m'excuse pour le retard dans la reponse mais mes soucis professionnels m'ont empeches de te repondre (et ils sont electriques et non informatiques mais tous les chemins menent à rome pourvu qu'on les suivent...). bon code.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Passage Fortran IV -> Fortran 77
    Par florianb dans le forum Fortran
    Réponses: 3
    Dernier message: 16/02/2009, 22h36
  2. DLL avec paramètres CString et String en .net
    Par basnifo dans le forum C++/CLI
    Réponses: 3
    Dernier message: 25/09/2008, 19h45
  3. Conversion Fortran 77 --> Fortran 90
    Par Signus dans le forum Fortran
    Réponses: 1
    Dernier message: 19/05/2008, 19h15
  4. Portage Digital Fortran à Intel Fortran
    Par galak63 dans le forum Fortran
    Réponses: 2
    Dernier message: 28/02/2007, 08h47
  5. Fonction en DLL sous Visual Compaq Fortran
    Par zerbault dans le forum Fortran
    Réponses: 1
    Dernier message: 04/01/2007, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo