Fortran Coder

标题: 含interface代码转dll的问题 [打印本页]

作者: andy8496    时间: 2015-4-6 18:10
标题: 含interface代码转dll的问题
[Fortran] 纯文本查看 复制代码
module test_mod
   interface call_test
     module procedure call_test_int
     module procedure call_test_real
   end interface
contains

subroutine call_test_int()
!dec$ attributes dllexport , ALIAS:"call_test_int"::call_test_int
   return
end subroutine

subroutine call_test_real()
!dec$ attributes dllexport , ALIAS:"call_test_real"::call_test_real
   return
end subroutine

end module

请教:现在要把这个文件做成dll.现在要call_test也能被调用,应该怎么写啊?


作者: 百事可乐    时间: 2015-4-6 18:16
这个,我想,做不到。
编译器对 generic function 到  specified function 的自动转换,是发生在编译时。而不是运行时。

而 DLL 调用只能在运行时。
作者: andy8496    时间: 2015-4-6 20:12
那我还是老老实实的用原始的名字吧。谢谢了!
作者: pasuka    时间: 2015-4-7 08:57
可以的,用C++的模板调用Fortran的subroutine即可,就看lz是否怕麻烦了
作者: 楚香饭    时间: 2015-4-7 09:29
pasuka 发表于 2015-4-7 08:57
可以的,用C++的模板调用Fortran的subroutine即可,就看lz是否怕麻烦了

那 fortran 的 dll 也得导出两个函数 call_test_int 和 call_test_real 才行。
作者: pasuka    时间: 2015-4-7 10:21
楚香饭 发表于 2015-4-7 09:29
那 fortran 的 dll 也得导出两个函数 call_test_int 和 call_test_real 才行。

是的,可以C++、Fortran混合编程,封装到一个动态链接库
fortran代码定义两个函数call_test_int 和call_test_real
C++代码用模板定义call_test
不想用C++的话,可以用C,参考printf函数的方法
只是,这么操作实在多此一举,实践中应当回避或者统筹优化
作者: andy8496    时间: 2015-4-8 18:39
谢谢!我还是喜欢单独用Fortran.当时是因为好玩儿才弄了这个interface,大部分调用还是用的原来的名字,剩下的稍微改下就好了,工作量不大。
再次谢谢各位了!




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2