FORTRAN混合编程笔记

FORTRAN混合编程笔记

一、C++调用FORTRAN静态连接库
  • 首先将FORTRAN编译成静态连接库(***.lab)文件;
  • 在VS中建立一个C++工程文件
  • 建立一个f2c.h头文件,主要目的是将FORTRAN的变量类型和C++的变量类型作一个转换
/* f2c.h  --  Standard Fortran to C header file */

/**  barf  [ba:rf]  2.  "He suggested using FORTRAN, and everybody barfed."

    - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */

    /* 2008 Feb 18  James M Anderson  --MPIfR  --edit the standard f2c.h header
                                        to select just what is needed for basic
                                        FORTRAN interaction in C, as the standard
                                        f2c.h is incompatible with C++ <vector> */

#ifndef F2C_INCLUDE
#define F2C_INCLUDE

typedef int integer;
typedef unsigned int uinteger;
typedef char *address;
typedef short int shortint;
typedef float real;
typedef double doublereal;
typedef struct { real r, i; } complex;
typedef struct { doublereal r, i; } doublecomplex;
typedef int logical;
typedef short int shortlogical;
typedef char logical1;
typedef char integer1;
#ifdef INTEGER_STAR_8   /* Adjust for integer*8. */
typedef long long longint;      /* system-dependent */
typedef unsigned long long ulongint;    /* system-dependent */
#endif

/* Extern is for use with -E */
#ifndef Extern
#define Extern extern
#endif

/* procedure parameter types for -A and -C++ */



#endif /* F2C_INCLUDE */
  • 在函数声明头文件中开头和结尾使用如下宏定义
#ifdef __cplusplus
extern "C" {
#endif
    extern 函数返回类型 函数名(函数参数);
    ...
#ifdef __cplusplus
}
#endif
  • 在函数定义文件前添加以下宏定义,用于调用静态连接库中的子函数时使用。
#ifndef FTN_NAME
#define FTN_NAME(a)                               a
#endif

如须要调用静态连接库中一个名为iristec的函数时则能够写成FTN_NAME(iristec)();c++

  • 在进行函数传值的时候必定要注意原FORTRAN程序中变量的类型,若是是指针则要传变量地址进去。
  • 注意函数定义文件的文件后缀必须是.c,不然没法编译成功。
二、C++编译动态连接库(***.DLL)
  • 函数声明时前面加上__declspec(dllexport)
相关文章
相关标签/搜索