C++与Fortran的混合编程问题.doc_第1页
C++与Fortran的混合编程问题.doc_第2页
C++与Fortran的混合编程问题.doc_第3页
C++与Fortran的混合编程问题.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C/C+调用Fortran的使用说明这里将详细介绍一下在C+中如何调用用Fortran语言编写函数的问题,即Fortran与C+的混合编程问题。通常情况下,C与Fortran的混合编程问题是利用动态链接库的方式进行的,换句话说,如果在C/C+中调用Fortran函数,应将Fortran函数按照一定的协议编译为动态链接库,然后即可实现二者的混合编程问题。实现这一目的有两种方式:显示链接与隐式链接,下面通过两个非常简单的实例分别介绍之。编译环境:Fortran:推荐使用Compaq Visual Fortran 6.0以上的版本,C+:Microsoft Visual C+6.0。1. 显式链接, (a) 找开CVF编译器,然后新建一个Fortran DLL工程(选择Fortran Dynamic Link Library),并指定工程名,如下图所示:按确定按钮,然后新建一个Fortran 源文件,并输入以下的Fortran代码:(这里仅为说明问题,实际的问题比下面的代码要复杂得多。)SUBROUTINE OUTPUT(N)!必须声明本函数为输出函数:DLLEXPORT!DEC$ ATTRIBUTES DLLEXPORT:OUTPUTIMPLICIT NONEINTEGER NN=N+10WRITE(*,*) N=,nEND SUBROUTINE OUTPUT经编译,链接后,将在Debug目录下生成两个文件,即dll文件与lib文件。(b) 启动Visual C+6.0,然后新建一个console工程(即Win32 Console Application,当然在MFC中也是完成可行的),如下图所示:按确定按钮,新建一个空的工程后,再新建一个C+源文件,并输入以下的代码:#include #include int main()typedef void (_stdcall * wndProc)(int& ); HINSTANCE hLibrary=LoadLibrary(pp.dll); /加载动态库文件if(hLibrary=NULL)coutcant find the dll fileendl;return -1;wndProc test=(wndProc)GetProcAddress(hLibrary,OUTPUT); /获得Fortran导出函数的地址if(test=NULL)coutcant find the function file.endl;return -2;int n=3;test(n);/调用fortran函数FreeLibrary(hLibrary); /卸载动态库文件return 0;当编译通过后,将由fortran编译器生成的动态库文件(本算例为pp.dll)复制到C+的Debug文件夹中(即mmdebug),然后点击执行即可,程序的动行结果为:2. 隐式链接与上文所介绍的显示链接相比,隐式链接要相对容易一点。下面也通过一个算例进行说明。 (1) 建立一个Fortran动态库文件,其方法与上述完全相同,然后在CVF编译器中输入以下的代码:SUBROUTINE OUTPUT(N)!下面为对Fortran函数的声明!ms$if .not. defined(LINKDIRECT)!ms$attributes dllexport : OUTPUT!ms$endifIMPLICIT NONEINTEGER NN=N+10WRITE(*,*) N=,nEND SUBROUTINE OUTPUT编译通过后,将在Fortran工程文件夹的Debug文件夹中生成两个文件,即*.dll文件与*.lib文件。(2) 新建一个C+ Console项目,并新建一个C+文件,然后输入以下的代码:#include #include /声明函数OUTPUT为extern型的,即是从外部调用的。extern C void _stdcall OUTPUT(int& n);int main()int n=3;OUTPUT(n);return 0;然后将Fortran编译器生成的两个文件(dll文件与lib文件)复制到C+的当前目录下,并将lib文件加入到当前的C+工程项目中,如下图所示:点击菜单“工程添加工程Files”,然后选中pp.lib文件即可,如下图所示:此时即可通过编译,执行此程序,其输出结果如下所示:总结本文通过两个简单的实例详细介绍了如何在C+中调用Fortran函数的两种方法,即显式链接与隐式链接。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论