Fortran Coder

查看: 8582|回复: 5
打印 上一主题 下一主题

[混编] C++和Fortran混合编程的问题

[复制链接]

5

帖子

2

主题

0

精华

入门

F 币
41 元
贡献
19 点
跳转到指定楼层
楼主
发表于 2015-9-27 16:56:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xd006 于 2015-9-27 17:14 编辑

请教一个C++和Fortran混合编程的问题,我以前做过一个比较复杂的Fortran程序,其中包含了很多子程序,现在想用C++调用,能否只将原来的Fortran主程序改为函数,并对该函数进行调用约定,再整体编译为dll,供C++调用?还是所有的子程序都需要修改?我只是想用C++做个界面,计算用Fortran。
目前是将原Fortran主程序改成了一个subroutine,让它按照原主程序的方式调用其它子程序和函数。编译成DLL后加入C++混合编译,编译能通过,也能生成,但是DLL文件传递不进C++中。

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

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2015-9-27 17:15:05 | 只看该作者
只需更改您C++需要调用的程序既可。

fortran内部调用的函数无需修改,也无需由dll导出

5

帖子

2

主题

0

精华

入门

F 币
41 元
贡献
19 点
板凳
 楼主| 发表于 2015-9-27 17:50:52 | 只看该作者
vvt 发表于 2015-9-27 17:15
只需更改您C++需要调用的程序既可。

fortran内部调用的函数无需修改,也无需由dll导出 ...

非常感谢!
您能帮忙看看附图中“HINSTANCE hLibrary=LoadLibrary(_T("SATRCSDLL.dll"))”是什么问题吗?为什么hLibrary没有值呢?
我用的VS2010.

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
地板
发表于 2015-9-27 18:20:58 | 只看该作者
可能是有依赖。比如 Libifcoremd.dll (只是举例)
用 Dependency walker 找找依赖,看这些依赖是否在 path 里?
也可以试试把这些依赖的 dll 复制到一起。或者取消依赖。

参考 http://fcode.cn/guide-53-1.html

5

帖子

2

主题

0

精华

入门

F 币
41 元
贡献
19 点
5#
 楼主| 发表于 2015-9-27 20:01:31 | 只看该作者
vvt 发表于 2015-9-27 18:20
可能是有依赖。比如 Libifcoremd.dll (只是举例)
用 Dependency walker 找找依赖,看这些依赖是否在 path ...

我在编译Dll时候,选择了Multithreaded,按道理应该时候取消依赖了啊,可是还是不行。

490

帖子

4

主题

0

精华

大宗师

F 币
3298 元
贡献
1948 点

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

6#
发表于 2015-9-27 21:05:38 | 只看该作者
1、Fortran代码得照iso_c_binding的规范写interface
2、C++代码得用extern “C”的申明函数
若是用gcc的话,C和F直接一起编译就行,C++和F稍微复杂些
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-24 02:15

Powered by Tencent X3.4

© 2013-2024 Tencent

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