Example:.f导出DLL 与lib(导入库)
subroutine FORTRANADD(a,b,c)
c Expose subroutine fortranDll to users of this DLL
!DEC$ ATTRIBUTES DLLEXPORT::FORTRANADD
implicit none
double precision a,b,c
c Variables
c Body of fortranDll
c=a+b
return
end subroutine FORTRANADD
Example:.c导出DLL导出DLL 与lib(导入库)
//.h
#ifndef DLLAPI
#define DLLAPI __declspec(dllexport)
#endif
#ifdef __cplusplus
extern "C"{
#endif // __cplusplus
DLLAPI double add_db(double a, double b);
#ifdef __cplusplus
}
#endif // __cplusplus
//.c
#include "add.h"
DLLAPI double add_db(double a, double b)
{
return a + b;
}
导入调用的时候需要注意以下几点
1、fortran不区分大小写(全部视为大写),所以fortran使用C导出函数functionname的时候若想使用EXTERNAL functionname直接调用,则fuctionname必须为大写;否则需要使用转换调用,详见https://blog.csdn.net/m0_37614810/article/details/117672750?spm=1001.2014.3001.5501
2、fortran默认使用reference传参,若使用默认编译,则c中函数的value传参需要改为reference传参,即上述.c与 .h文件需修改为
//.h
#ifndef DLLAPI
#define DLLAPI __declspec(dllexport)
#endif
#ifdef __cplusplus
extern "C"{
#endif // __cplusplus
DLLAPI double add_db(double *a, double *b);
#ifdef __cplusplus
}
#endif // __cplusplus
//.c
#include "add.h"
DLLAPI double add_db(double *a, double *b)
{
return *a + *b;
}