C与fortran动态库导出与调用相关

这篇博客介绍了如何在Fortran中调用C语言编写的DLL与lib。内容包括Fortran和C的子程序定义,以及在C中导出DLL和对应的lib文件。在调用时,注意Fortran的大小写不敏感特性及参数传递方式的差异,可能需要修改C函数的参数类型以匹配Fortran的引用传参。
摘要由CSDN通过智能技术生成

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;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值