用fortran调用dll

 

采用vs.net+ifort做一个简单的dll,当然是从help里面拷出来的。

SUBROUTINE ARRAYTEST(arr)
!DEC$ ATTRIBUTES DLLEXPORT :: ARRAYTEST
REAL(4) arr(3, 7)
INTEGER i, j
DO i = 1, 3
DO j = 1, 7
   arr (i, j) = 11.0 * i + j
END DO
END DO
END SUBROUTINE

存成mydll.f90,用dynamic link library的project进行build,ok,没问题。然后新建一个console的project,取名testdll,把mydll.lib和mydll.dll复制到testdll目录下,然后再考一个例程:

INTERFACE
SUBROUTINE ARRAYTEST (rarray)
!DEC$ ATTRIBUTES DLLIMPORT :: ARRAYTEST
REAL rarray(3, 7)
END SUBROUTINE ARRAYTEST
END INTERFACE
real(4) arr(3, 7)
call arraytest(arr)
print*, arr
end

取名test.f90,然后project->properties->linker->advanced library:输入mydll.lib,编译,说arraytest没有被定义(error LNK2019:...)给mydll.lib加上绝对路径,仍然不行。咋回事呢?

查了一下彭国伦的fortran90程设,发现问题是在既便我加了采用上述方法让工程找mydll.lib,由于该路径没有加入到lib path里,所以根本不会找到mydll.lib.是不是加了lib path就可以呢?测试表明,加了也找不到。:( 最后,采用彭指出的,也是最简单的方法。直接把mydll.lib加入到project里,一起显式编译,因为mydll.dll在系统可以找到的目录里,所以最后build成功,执行正常。

当然test.f90也可以写成更简单的形式:

!DEC$ ATTRIBUTES DLLIMPORT :: ARRAYTEST
real(4) arr(3, 7)
call arraytest(arr)
print*, arr
end

***一个问题是:如果和与ms-vs6.0相链接,如果以上的dll被C语言调用,那么,会出现编译没问题,但执行时初始化失败,分析是!DEC的问题。如何解决,还没深入分析。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值