ventajas proposito programacion programa lenguaje estructura ejemplos desventajas definicion comandos c fortran

proposito - lenguaje de programacion fortran ventajas y desventajas



Llamando al código C de FORTRAN (3)

Dado Microsoft FORTRAN 5.1 y Microsoft C / C ++ 14.0, junto con el enlazador que viene con esa versión de FORTRAN (que debe usarse para otras dependencias) ¿cómo creo una función C y la llamo desde la aplicación FORTRAN?



Tienes dos opciones.
1) Puedo mostrar con el ejemplo

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

Esto funciona con la cadena de herramientas gcc. Tendrás que volcar en la DLL y en el código de objeto fortran para ver si los nombres coinciden correctamente.
La otra forma es similar:

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

COMPILAR EL COMANDO

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

Espero que esto ayude


Tal vez mejor tarde que nunca. Recuerdo usar ms fortran 5.1 con visual studio 1. No estoy seguro de qué visual studio 14.0 es equivalente, pero creo que es relativamente reciente y no tiene 13 años. Creo que esta combinación no arranca ya que 5.1 es un compilador de 16 bits para Windows 3.