É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
0
A
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 <l;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
3
Il y a un article sur MSDN avec le code exemple ici: FORTRAN calls to C
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.