Bonjour à tous , voilà j'aimerais appeler des sous routines dans un code C qui elles mêmes sont importées d'une DLL voici mon Code:
#Main.cpp
le code fortran pour l'importation des DLL:
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 #include "fortran.h" #pragma comment(lib,"thermodll.lib") SUBROUTINE EPICIN(CHARACTER DBNAME,INTEGER& IHELPE); SUBROUTINE LOADFLU(CHARACTER NAMFLUX,INTEGER& IHELPE); SUBROUTINE PHASEQ(CHARACTER NAMFLU8,CHARACTER NAMPRO8, CHARACTER NAMPHAS8,DOUBLE_PRECISION* FLUX, INTEGER& I_FLUX,DOUBLE_PRECISION* DEBMOL, INTEGER& NSMAX1,DOUBLE_PRECISION* DEBPHAS, INTEGER& I_DEBPHAS,DOUBLE_PRECISION* VLSLS, INTEGER& NSMAX_2,INTEGER& I_VLSLS,INTEGER& IHELPE); void epicin(char dbname[80,int IHELPE) { CHARACTER DBname(dbname,80); EPICIN(DBname,int IHELPE); } void loadflu(char namflux[8], int ihelpe) { CHARACTER Namflux(namflux,8); INTEGER Ihelpe=(INTEGER) ihelpe; LOADFLU(Namflux,Ihelpe); } void phaseq(char namflu8[8],char nampro8[3], char namphas8[3], double flux[6], double debmol[60], double debphas[4], double vlsls[60][4], int ihelpe) { int i_flux = 6, i_debmol = 60, i_debphas = 4, i_vlsls_1 = 60, i_vlsls_2 = 4; CHARACTER NamFlu8(namflu8,8); CHARACTER NamPro8(nampro8,3); CHARACTER NamPhas8(namphas8,3); DOUBLE_PRECISION Flux(6); DOUBLE_PRECISION Debmol(60); DOUBLE_PRECISION DebPhas(4); FMATRIX<DOUBLE_PRECISION> ARRAY(&vlsls[0][0],i_vlsls_1,i_vlsls_2); INTEGER IHELPE=(INTEGER) ihelpe; PHASEQ(NamFlu8,NamPro8,NamPhas8,&Flux,i_flux,&Debmol,i_debmol,&DebPhas,i_debphas,ARRAY,i_vlsls_1,i_vlsls_2,IHELPE); } int main() { char DBname [80]="tstinter.bdp", Namflux[8]="P"; int IHELPE=5, Ihelpe=5; epicin(DBname,IHELPE); loadflu(Namflux,IHELPE); return 0; }
#routine2.for
Et voici l'erreur que j'obtiens :
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 SUBROUTINE EPICIN(DBname,IHELPE) cDEC$ ATTRIBUTES DLLIMPORT::EPICIN CHARACTER*80 DBname INTEGER IHELPE END SUBROUTINE LOADFLU(Namflux, Ihelpe) cDEC$ ATTRIBUTES DLLIMPORT::LOADFLU CHARACTER*8 Namflux INTEGER IHELPE END SUBROUTINE PHASEQ(NamFlu8,NamPro8,NamPhas8,Flux,Debmol, * DebPhas,VLSLS,IHELPE) Parameter NSMAX=60 cDEC$ ATTRIBUTES DLLIMPORT::PHASEQ CHARACTER*8 Namflu8 CHARACTER*3 NamPro8 CHARACTER*3 NamPhas8 Double precision Flux(6) Double precision Debmol(NSMAX) Double precision Debphas(4) Double precision VLSLS(NSMAX,4) INTEGER IHELPE END
1>Édition des liens en cours...
1>Main.obj : error LNK2019: symbole externe non résolu _PHASEQ@64 référencé dans la fonction "void __cdecl phaseq(char * const,char * const,char * const,double * const,double * const,double * const,double (* const)[4],int)" (?phaseq@@YAXQAD00QAN11QAY03NH@Z)
1>C:\Users\Vista Tux\Documents\Visual Studio 2008\Projects\Alexis\Debug\Alexis.exe : fatal error LNK1120: 1 externes non résolus
Les importations de la DLL sont correctes avec les bon types de paramètres etc...je n'arrive pas à résoudre cette erreur j'ai bien inclus les libs dans mon projet et tout...J'utilise une interface Fortran/C qui est définie dans le fichier fortran.h(des typedef...) mais je suis ouvert si vous avez une idée plus simple pour réécrire ce code
Merci
Partager