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?
Hay un artículo en MSDN con código de ejemplo aquí: FORTRAN llama a C
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 <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
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.