xd006 发表于 2015-9-27 16:56:19

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

本帖最后由 xd006 于 2015-9-27 17:14 编辑

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

vvt 发表于 2015-9-27 17:15:05

只需更改您C++需要调用的程序既可。

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

xd006 发表于 2015-9-27 17:50:52

vvt 发表于 2015-9-27 17:15
只需更改您C++需要调用的程序既可。

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

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

vvt 发表于 2015-9-27 18:20:58

可能是有依赖。比如 Libifcoremd.dll (只是举例)
用 Dependency walker 找找依赖,看这些依赖是否在 path 里?
也可以试试把这些依赖的 dll 复制到一起。或者取消依赖。

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

xd006 发表于 2015-9-27 20:01:31

vvt 发表于 2015-9-27 18:20
可能是有依赖。比如 Libifcoremd.dll (只是举例)
用 Dependency walker 找找依赖,看这些依赖是否在 path ...

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

pasuka 发表于 2015-9-27 21:05:38

1、Fortran代码得照iso_c_binding的规范写interface
2、C++代码得用extern “C”的申明函数
若是用gcc的话,C和F直接一起编译就行,C++和F稍微复杂些
页: [1]
查看完整版本: C++和Fortran混合编程的问题