2008-12-09 9 views
0

Étant donné Microsoft FORTRAN 5.1 et Microsoft C/C++ 14.0, ainsi que l'éditeur de liens fourni avec cette version de FORTRAN (qui doit être utilisé pour d'autres dépendances), comment créer une fonction C et l'appeler l'application FORTRAN?Appelant le code C de FORTRAN

Répondre

1

Vous avez deux choix.
1) Je peux montrer l'exemple

FORTRAN

program ftest 
use iso_c_bindings 
implicit none 
interface 
function saythis(a) ! should be subroutine if saythis returns void 
import :: c_ptr 
type(c_ptr), value :: a 
end function saythis 
end interface 

character(len=80), target :: str 
type(c_ptr) cstr 
integer :: r 

str='Hello World From Fortran' // C_NULL_CHAR 
cstr=c_loc(str(1:1)) 
r=saythis(cstr) 

C/C++

#ifdef __cpluscplus 
#include &ltl;cstdio> 
using namespace std; 
#else 
#inlcude <stdio.h> 
#endif 

#ifdef __GNUC__ 
#define FORT(func) funC## _ 
#else 
#define FORT(func) __stdcall funC## _ 
#endif 

#ifdef __cpluscplus 
extern "C" { 
#endif 
__declspec(dllexport) int FORT(sayit)(char* c) 
{ 
return printf("%s\n",c); 
} 

#ifdef __cpluscplus 
} 
#endif 

Cela fonctionne avec/gcc toolchain. Vous devrez copier sur le DLL et le code d'objet Fortran pour voir si les noms correspondent correctement.
L'autre façon est similaire:

//This is for gcc toolchain 
//you'll have to find the symbol conversion yourself 
//I think that Visual Studio converts fortran names 
//to ALL CAPS so instead of func => _func you'll need func => FUNC 

FORTRAN

program ftest 
integer aa,bb,cc 
common/vari/aa,bb,cc 

aa=7 
bb=11 
cc=0 
call dosomething 
call dosomethingelse(aa,bb,cc) 

C/C++

#ifdef __cplusplus 
extern "C" { 
#endif 
int _dosomething(); 
int _dosomethingelse(int*,int*,int*); //all fortran is pass by reference 
struct { int aa,bb,cc; } vari; 
#ifdef __cplusplus 
} 
#endif 

//function def's go here 
//struct vari should be the same memory as common/vari block 

COMPILE COMMAND

$>g++ -c ctest.c <br/> 
$>gfortran -c ftest.f90 <br/> 
$>gfortran *.o -lstdc++ -o test_prog <br/> 

J'espère que cela aidera

0

Peut-être mieux tard que jamais. Je me souviens d'utiliser ms fortran 5.1 avec Visual Studio 1. Je ne suis pas sûr de quel studio visuel 14.0 est équivalent mais je pense que c'est relativement récent et pas 13 ans. Je pense que cette combinaison est un non-démarreur que 5.1 est un compilateur 16 bits pour Windows 3.