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

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;
}
le code fortran pour l'importation des DLL:
#routine2.for
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
Et voici l'erreur que j'obtiens :
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