VB与Fortran的混合编程_第1页
VB与Fortran的混合编程_第2页
VB与Fortran的混合编程_第3页
VB与Fortran的混合编程_第4页
VB与Fortran的混合编程_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

!MSSattributesvalue!MSSattributesvalue1)1)创建dll项目(Project)VB与Fortran的混合编程一、 实验目的掌握VB和Fortran混合编程的方法。掌握Fortran中动态链接库的创建方法。掌握VB中对动态链接库的调用方法。二、 实验原理一般VB与Fortran混合编程的方法主要有两种,即VB中直接调用可执行文件(利用Shell函数直接调用Fortran编译出来的可执行文件)和利用动态链接库DLL(DynamicLinkLibrary)与Fortran混合编程。第一种方法比较简单,将Fortran源程序编译为可执行文件(扩展名为.exe)之后在VB环境下用shell()函数调用即可。这种方法适合于计算量较大而交互操作不多的时候。但是,Shell函数是以异步方式执行的,这种执行方式使VB程序不能等待Fortran程序计算结束,而是继续执行后续的程序,从而容易使最终结果出错。第二种方法是将Fortran源程序编译为动态链接库(扩展名为.dll),然后在VB环境下调用动态链接库里的函数和过程来完成各项汁算任务。虽然没有第一种方法操作简单,但是调用动态链接库的方法更为灵活和实用。三、 Fortran中动态链接库(.dll文件)的创建在CompaqVisualFortran6.5中创建".Dll"文件的步骤如下:跟一般的Fortran项U相似,首先要创建一个dll项口,具体步骤如下:点击File New,在弹出的new对话框中选择Projects项下的DynamicLinkLibrary,在右侧ProjectName下而的文本框中输入项LI名称,在Location下的文本框中选好路径之后点击Ok,这样我们就创建了一个空的dll项目文件。2) 在dll项目中添加文件在刚才创建的dll项U中添加一个空文件,这跟普通的Fortran项U中添加文件的方法一样。点击file new,在弹出的new对话框中选择Files项,在列表框中选择文件类型(单击选中即可),一般选择FortranFixedformatSourceFiles(固定格式源文件)或FortranFreeformatSourceFiles(自山格式源文件),在右边File标签下的文本框中输入源文件名,点击0K,一个空的源文件就建好了,接下来可以在里面编写Fortran源程序了。3) 创建子程序(过程)和函数DU文件是一种特殊的可执行文件,在其源程序中没有主程序,而是一个或多个子程序或函数,我们通过调用这些子程序和函数来完成一些特定的任务。在D11项中创建子程序和函数的方法跟一般Fortran项LI文件中的没有太大的差别,只需在子程序或函数开始时加入如下一些微软扩展属性编译伪指令即可:!MSSattributesdllexport!MSSattributesalias!MSSattributesaliassubplus'!MSSattributesaliassubplus'::subplus!MSSattributesreference例如,如果要编写一个计算双精度实数加法的子程序,子程序名为subplus,输入参数为d和b,输出参数为C,则完整的源程序可以这样写:subroutinesubplus(a,b,c)!MSSattributesdllexport::subplus!MSSattributesalias:'subplus'::subplus!MSSattributesdllexport::subplus!MSSattributesalias:'subplus'::subplus!MSSattributesvalue::a,b!MSSattributesreference::creal(8)::a,b,cc=a+breturnendsubroutinesubplus一般情况下我们将输入参数定义为传递数值方式,而将输出变量定义为传递地址方式。像这样添加一些子程序函数,然后可以将他们编译和生成dll文件(快捷键是F7)。之后在该项U文件目录下的debug文件夹中可以找到这个以项目名称命名的dll文件,我们可以在YB环境中调用它。四、VB2005中对动态链接库的调用VB对动态链接库的调用如同对普通子程序或函数的调用,在调用之前必须先对D11中的子程序或函数声明。声明格式如下:[PublicPrivate]DeclareSubfunctionNameLib“Libname"[Alias"aliasname”J[([arglist])]例如在C盘根|zl录下有一个名为mathfunction,dll的动态链接库,我们对这个库中名为subplus的子程序的声明如下:PublicDeclareSubsubplusL让"C:\mathfunction.dll"(ByVdlaAsDouble,ByVaibAsDouble,ByrefcAsDouble)在声明之后这些函数或过程就可以向普通的函数或过程一样在VB环境下调用To五、实验内容用Fortran编写一个Dll文件,其中包含计算两个双精度实数加、减、乘、除的过程和函数,而后在VB环境下设置简单的界面,通过调用这些过程和函数来完成两个输入双精度实数的加、减、乘、除运算,并将计算结果显示出来。1、Fortran中创建一个名为mathfunction的D11项LI,在项中添加一个名为mathfunction的固定格式源文件,添加如下代码:*************subroutine********************subroutinesubplus(a,b,c)!MSSattributesdllexport::subplus!MSSattributesalias!MSSattributesalias:,submultiply,::submultiply!MSSattributes!MSSattributesdllexport!MSSattributesdllexport::submultiply!MSSattributesvalue::a,b!MSSattributesreference::creal(8)::a,b,cc=a+breturnendsubroutinesubplussubroutinesubsubtract(a,b,c)!MSSattributesdllexport::subsubtract!MSSattributesalias/subsubtract^::subsubtract!MSSattributesvalue::a,b!MSSattributesreference::creal(8)::a,b,cc=a-breturnendsubroutinesubsubtractsubroutinesubmultiply(a,b,c)

value::a,b!MSSattributesreference::creal(8)::a,b,cc=a*breturnendsubroutinesubmultiplysubroutinesubdivide(a,b,c)!MSSattributesdllexport::subdivide!MSSattributesalias:'subdivide'::subdivide!MSSattributesvalue::a,b!MSSattributesreference::creal(8)::a,b,cc=a/breturnendsubroutinesubdivide*o{ot<x«ic********subroutine********************而后在项LI中另添加一个名为mathfunction2的固定格式源文件,添加如下代码:水*********unction********************functionfunplus(a,b)!MSSattributesdllexport::funplus!MSSattributesalias:'funplus'::funplus!MSSattributesvalue::a,breal(8)::a,b,funplusfunplus二d+breturnendfunctionfunplusfunctionfunsubtract(a,b)!MSSattributesdllexport::funsubtract!MSSattributesalias/funsubtract"::funsubtract!MSSattributesvalue::a,breal(8)::a,b,funsubtractfunsubtract=a~breturnendfunctionfunsubtractfunctionfunmultiply(a,b)!MSSattributesdllexport::funmultiply!MSSattributesalias:'funmultiply'::funmultiply!MSSattributesvalue::a,breal(8)::a,b,funmultiplyfunmuItiply=a*breturnendfunctionfunmultiplyfunctionfundivide(a,b)!MSSattributesdllexport::fundivide!MSSattributesalias:'fundivide'::fundivide!MSSattributesvalue::a,breal(8)::a,b,fundividefundivide=a/breturnendfunctionfundivide*欢*******欢**^function****欢*******欢*******编写好源代码后编译生成Dll文件。随后我们会在该项U所在LI录下的debug文件夹中找到这个名为mathfunction,dll的文件。将这个D11文件拷贝到C:\WINDOWS\Systemo2在VB2005中新建一个名为vb_fortran的WindowsApplication项目,设计-界面,添加三个Label,三个Textbox和四个Button,在代码编辑器中输入以下代码:PublicClassFormlPrivateSubButtonl_Click(ByValsenderAsSystem.0bject,ByVaieAsSystein.EventArgs)HandlesButtonl・ClickDimaAsDoubleDimbAsDoubleDimcAsDoublea=CDbl(TextBoxl.Text)b=CDbl(TextBox2.Text)?Callsubplus(a,b,c)c=funplus(a,b)TextBox3・Text二cEndSubPrivateSubButton2_Click(ByValsenderAsSystem.0bject,ByVaieAsSystem・EventArgs)HandlesButton2.ClickDimaAsDoubleDimbAsDoubleDimcAsDoublea=CDbl(TextBoxl.Text)b=CDbl(TextBox2.Text)'Callsubsubtract(a,b,c)c=funsubtract(a,b)TextBox3・Text=cEndSubPrivateSubButton3_C1ick(ByVa1senderAsSystem.0bject,ByVaieAsSystem.EventArgs)HandlesButton3.ClickDimaAsDoubleDimbAsDoubleDimcAsDoublea=CDbl(TextBoxl.Text)b=CDbl(TextBox2.Text)Callsubmultiply(a,b,c)c=funmultiply(a,b)TextBox3・Text二cEndSubPrivateSubButton4_C1ick(ByVa1senderAsSystem.0bject,ByVaieAsSystem.EventArgs)HandlesButton4.ClickDimaAsDoubleDimbAsDoubleDimcAsDoublea=CDbl(TextBoxl.Text)b=CDbl(TextBox2.Text)Callsubdivide(a,b,c)c=fundivide(a,b)TextBox3・Text=cEndSubEndClass上面的代码也很简单。代码中将对过程的调用注释掉了,因为这里对过程和对函数的调用结果是一样的,任选其一都可以,注意调用的格式就可以了。在项目文件中添加一个模块文件,输入以下代码:ModuleModulelPublicDeclareSubsubplusLib^mathfunction.dll/z(ByVaiaAsDouble,ByVaibAsDouble,ByrefcAsDouble)PublicDeclareSubsubsubtractLib,zmathfunction.dll"(ByVaiaAsDouble,ByVaibAsDouble,ByRefcAsDouble)PublicDeclareSubsubmultiplyLibzzmathfunction.dll"(ByVaiaAsDouble,ByVaibAsDouble,ByRefcAsDouble)PublicDeclareSubsubdivideLib/Zmathfunction.dll"(ByVaiaAsDouble,ByVaibAsDouble,ByRefcAsDouble)PublicDeclareFunctionfunplusLib^mathfunction.dll"(ByVaiaAsDouble,ByVaibAsDouble)AsDoublePublicDeclareFunctionfunsubtractLib^mathfunction.dll/z(ByVaiaAsDouble,ByVaibAsDouble)AsDoublePublicDeclareFunctionfunmultiplyLib/Zmathfunction.dll/z(ByVaiaAsDouble,ByVaib

温馨提示

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

评论

0/150

提交评论