Fortran Coder

查看: 10691|回复: 6
打印 上一主题 下一主题

[混编] 含interface代码转dll的问题

[复制链接]

131

帖子

34

主题

0

精华

宗师

F 币
1601 元
贡献
813 点
跳转到指定楼层
楼主
发表于 2015-4-6 18:10:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[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也能被调用,应该怎么写啊?

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

100

帖子

0

主题

0

精华

专家

F 币
550 元
贡献
291 点

规矩勋章元老勋章

QQ
沙发
发表于 2015-4-6 18:16:28 | 只看该作者
这个,我想,做不到。
编译器对 generic function 到  specified function 的自动转换,是发生在编译时。而不是运行时。

而 DLL 调用只能在运行时。

131

帖子

34

主题

0

精华

宗师

F 币
1601 元
贡献
813 点
板凳
 楼主| 发表于 2015-4-6 20:12:43 | 只看该作者
那我还是老老实实的用原始的名字吧。谢谢了!

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

地板
发表于 2015-4-7 08:57:20 | 只看该作者
可以的,用C++的模板调用Fortran的subroutine即可,就看lz是否怕麻烦了

736

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
700 元
贡献
359 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

5#
发表于 2015-4-7 09:29:57 | 只看该作者
pasuka 发表于 2015-4-7 08:57
可以的,用C++的模板调用Fortran的subroutine即可,就看lz是否怕麻烦了

那 fortran 的 dll 也得导出两个函数 call_test_int 和 call_test_real 才行。

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

水王勋章元老勋章热心勋章

6#
发表于 2015-4-7 10:21:34 | 只看该作者
楚香饭 发表于 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函数的方法
只是,这么操作实在多此一举,实践中应当回避或者统筹优化

131

帖子

34

主题

0

精华

宗师

F 币
1601 元
贡献
813 点
7#
 楼主| 发表于 2015-4-8 18:39:44 | 只看该作者
谢谢!我还是喜欢单独用Fortran.当时是因为好玩儿才弄了这个interface,大部分调用还是用的原来的名字,剩下的稍微改下就好了,工作量不大。
再次谢谢各位了!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-12-23 03:45

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表