柚子快报激活码778899分享:fortron使用经验

http://www.51969.com/

C# 调用 Fortron 的 dll

经验:

需要在导出函数的地方标记函数名

!DEC$ ATTRIBUTES DLLEXPORT::AAAA

!DEC$ ATTRIBUTES VALUE:: nt, ms, nv, nf

需要在C#端,定义函数声明,注意名称为大写

设置fortron dll 的输出名称

dll 导出接口

subroutine AAAA(nt, ms, nv, nf, parm, pdat, dist, vfiso)

implicit none

!DEC$ ATTRIBUTES DLLEXPORT::AAAA

!DEC$ ATTRIBUTES VALUE:: nt, ms, nv, nf

integer:: nt, ms, mp, nv, nf, kflank, i, j, k

real :: pdat(nt*ms), dist(nt), parm(10), vfiso(nv*nf), vmin, fmax, dv, dt, df

! 代码注释

!nt=ntrace, ms=msamp,

dt=parm(1); dv=parm(2); df=parm(3); vmin=parm(4)

fmax=parm(5); kflank=parm(6)

end subroutine

Fortron 调用 Fortron 的动态库

注意函数声明形式,只要一行生成即可。

!DEC$ ATTRIBUTES DLLEXPORT::test1

引用lib,并将生成 dll 文件复制到 exe 同级目录下。

定义 fortron 工程

Subroutine test1(m,n,a)

implicit none

!DEC$ ATTRIBUTES DLLEXPORT::test1

integer :: m, n, i, j

real*8 :: a(m,n)

do i=1,m

do j=1,n

a(i,j) = i + j

end do

end do

!m=3; n=4

print *, m, n

do i=1,m

print *, (a(i,j), j=1,n)

end do

end subroutine

调用 Fortron Dll 端

program main

implicit none

integer :: m, n, i, j, k

real*8 :: a(3,4), b(12)

data ((a(i,j),j=1,4),i=1,3)/ 11., 12., 13., 14., &

21., 22., 23., 24., &

31., 32., 33., 34./

m=3; n=4

do i=1,m

print '(4f10.2)', (a(i,j), j=1,n)

end do

print *

do i=1,m

do j=1,n

k=(i-1)*n+j; b(k)=a(i,j)

end do

end do

call test1(m,n,a)

!k=m*n; call test2(k,b)

do i=1,m

print *, (a(i,j), j=1,n)

end do

end

关键在于 call test1(m,n,a)。

设置 dll 的引用。

柚子快报激活码778899分享:fortron使用经验

http://www.51969.com/

查看原文