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 |
Partager