如何在C语言中调用FORTRAN生成的DLL里的函数

如何在C语言中调用FORTRAN生成的DLL里的函数,第1张

C语言和Fortran混合编程借助于Fortran生成的DLL进行(采用C默认的传址方式进行函数参数传递)方法和实例:

1Fortran

生成DLL

新建Fortran

DLL程序test1f

添加如下代码:

! test1f90

! FUNCTIONS/SUBROUTINES

exported from test1dll:

! test1 -

subroutine

!示例没有返回值的子例程

subroutine

test1(a,b)

! Expose subroutine test1 to

users of this DLL

!DEC$ ATTRIBUTES

C,DLLEXPORT::test1

! Variables

! Body of

test1

integer a,b

integer sum

sum=a+b

return

end subroutine

test1

!示例有返回值的整数四则运算

!两数相加

function

add(a,b)

implicit none

!DEC$ ATTRIBUTES

C,DLLEXPORT::add

integer

a,b,add

add=a+b

return

end

!两数相减

function

abstract(a,b)

implicit none

!DEC$ ATTRIBUTES

C,DLLEXPORT::abstract

integer

a,b,abstract

abstract=a-b

return

end

!两数相乘

function

multiply(a,b)

implicit none

!DEC$ ATTRIBUTES

C,DLLEXPORT::multiply

integer

a,b,multiply

multiply=ab

return

end

!两数相除

(需要添加考虑被除数是否为0以及能否整除的判断)

function

divided(a,b)

implicit none

!DEC$ ATTRIBUTES

C,DLLEXPORT::divided

integer

a,b,divided

divided=a/b

return

end

编译后生成test1dll,test1obj等文件。其中这两个文件是我们在VC中调用所需要的。

转换成复数的意思,

比如a,b都是实数型,c是复数型。

语句 c=cmplx(a,b) 即表示a+bi这个复数存入c中。

也可以用cmplx(a),没有b,相当于虚部 b等于零

floor(x)是向下取整的意思。或者说“向下舍入”、“向零取舍”,即取不大于x的最大整数,与“四舍五入”不同,下取整是直接取按照数轴上最接近要求值的左边值,即不大于要求值的最大的那个整数值。

round(x)是向上取整,直接取按照数轴上最接近要求值的左边值,即不小于要求值的最大的那个整数值。

扩展资料

FORTRAN语言是为科学、工程问题或企事业管理中的那些能够用数学公式表达的问题而设计的,其数值计算的功能较强。

FORTRAN 90对以往的FORTRAN语言标准作了大量的改动,使之成为一种功能强大、具有现代语言特征的计算机语言。其主要特色是加入了面向对象的概念及工具、提供了指针、加强了数组的功能、改良了旧式FORTRAN语法中的编写“版面”格式。

-floor函数

(1)可以试一试spread函数,SPREAD(a,d,n)以某维d扩展数组a的元素n次。

(2)既然matmul只能适用于2维矩阵,那么就把原来的一维数组统一改写成n×1的二维矩阵。

(3)dotproduct就是求向量积,至于你说的数组和二维矩阵相乘是什么鬼,我猜也就是matmul可以实现的功能吧,看第(2)个答案。

(4)这个问题学了fortran初级的就会,比如说要赋值a=1:1:100,直接a=(/(j,j=1,100,1)/)

表示从屏幕输入数据

5表示下面定义的i5 即read(,5) n等同于read(,'(i5)') n

n表示变量 即存取读入数值的变量

如果可以

麻烦你给点分撒

看帮助文档。

Fortran 是编程语言。是编译型的。

Matlab是数学工具,是命令解释型的。

你应该深切的体会一下两者的差别。Fortran是为了生成一个可执行的程序 exe 给别人使用。而 matlab 只是为了算出结果。

任何编译型语言都不可能有 help 命令。任何编译器都具有语法规定的函数,部分编译器扩展了自己的函数。如果你想了解细节,请参阅编译器的帮助文档。

character 意思是声明一个字符串。

() 意思是,字符串的大小是假定大小。

len 就是字符串变量的名字。

所谓假定大小,一般是对虚参而言的,意思就是说,字符串的大小与实参一样。传入多大就是多大。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12183978.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存