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

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

ID:41033162

大小:328.00 KB

页数:4页

时间:2019-08-14

C++与Fortran的混合编程问题_第1页
C++与Fortran的混合编程问题_第2页
C++与Fortran的混合编程问题_第3页
C++与Fortran的混合编程问题_第4页
资源描述:

《C++与Fortran的混合编程问题》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、C/C++调用Fortran的使用说明这里将详细介绍一下在C++中如何调用用Fortran语言编写函数的问题,即Fortran与C++的混合编程问题。通常情况下,C++与Fortran的混合编程问题是利用动态链接库的方式进行的,换句话说,如果在C/C++中调用Fortran函数,应将Fortran函数按照一定的协议编译为动态链接库,然后即可实现二者的混合编程问题。实现这一目的有两种方式:显示链接与隐式链接,下面通过两个非常简单的实例分别介绍之。编译环境:Fortran:推荐使用CompaqVisu

2、alFortran6.0以上的版本,C++:MicrosoftVisualC++6.0。1.显式链接,(a)找开CVF编译器,然后新建一个FortranDLL工程(选择FortranDynamicLinkLibrary),并指定工程名,如下图所示:按确定按钮,然后新建一个Fortran源文件,并输入以下的Fortran代码:(这里仅为说明问题,实际的问题比下面的代码要复杂得多。)SUBROUTINEOUTPUT(N)!必须声明本函数为输出函数:DLLEXPORT!DEC$ATTRIBUTESDLL

3、EXPORT::OUTPUT  IMPLICITNONEINTEGERNN=N+10WRITE(*,*)"N=",nENDSUBROUTINEOUTPUT经编译,链接后,将在Debug目录下生成两个文件,即dll文件与lib文件。(b)启动VisualC++6.0,然后新建一个console工程(即Win32ConsoleApplication,当然在MFC中也是完成可行的),如下图所示:按确定按钮,新建一个空的工程后,再新建一个C++源文件,并输入以下的代码:#include

4、h>#includeintmain(){typedefvoid(_stdcall*wndProc)(int&);HINSTANCEhLibrary=LoadLibrary("pp.dll");//加载动态库文件if(hLibrary==NULL){cout<<"can'tfindthedllfile"<

5、址if(test==NULL){cout<<"can'tfindthefunctionfile."<

6、。下面也通过一个算例进行说明。(1)建立一个Fortran动态库文件,其方法与上述完全相同,然后在CVF编译器中输入以下的代码:SUBROUTINEOUTPUT(N)!下面为对Fortran函数的声明!ms$if.not.defined(LINKDIRECT)!ms$attributesdllexport::OUTPUT!ms$endifIMPLICITNONEINTEGERNN=N+10WRITE(*,*)"N=",nENDSUBROUTINEOUTPUT编译通过后,将在Fortran工程文件夹

7、的Debug文件夹中生成两个文件,即*.dll文件与*.lib文件。(2)新建一个C++Console项目,并新建一个C++文件,然后输入以下的代码:#include#include//声明函数OUTPUT为extern型的,即是从外部调用的。extern"C"void_stdcallOUTPUT(int&n);intmain(){intn=3;OUTPUT(n);return0;}然后将Fortran编译器生成的两个文件(dll文件与lib文件)复制

8、到C++的当前目录下,并将lib文件加入到当前的C++工程项目中,如下图所示:点击菜单“工程-添加工程-Files”,然后选中pp.lib文件即可,如下图所示:此时即可通过编译,执行此程序,其输出结果如下所示:总结本文通过两个简单的实例详细介绍了如何在C++中调用Fortran函数的两种方法,即显式链接与隐式链接。当然实际中我们所遇到的问题将会比本实例要复杂得多,本文仅作为抛砖引玉之用。显式链接与隐式链接两种方法均各自有其优缺点,但由于隐式链接要比显示链接容易得多,也易于理解,实际

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。