VB与Fortran的混合编程Word文档格式.docx
- 文档编号:21673787
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:8
- 大小:17.47KB
VB与Fortran的混合编程Word文档格式.docx
《VB与Fortran的混合编程Word文档格式.docx》由会员分享,可在线阅读,更多相关《VB与Fortran的混合编程Word文档格式.docx(8页珍藏版)》请在冰豆网上搜索。
跟一般的Fortran项目相似,首先要创建一个dll项目,具体步骤如下:
点击File——New,在弹出的new对话框中选择Projects项下的DynamicLinkLibrary,在右侧ProjectName下面的文本框中输入项目名称,在Location下的文本框中选好路径之后点击Ok,这样我们就创建了一个空的dll项目文件。
2)在dll项目中添加文件
在刚才创建的dll项目中添加一个空文件,这跟普通的Fortran项目中添加文件的方法一样。
点击file——new,在弹出的new对话框中选择Files项,在列表框中选择文
件类型(单击选中即可),一般选择FortranFixedformatSourceFiles(固定格式源文件)或FortranFreeformatSourceFiles(自由格式源文件),在右边File标签下的文本框中输入源文件名,点击OK,一个空的源文件就建好了,接下来可以在里面编写Fortran源程序了。
3)创建子程序(过程)和函数
Dll文件是一种特殊的可执行文件,在其源程序中没有主程序,而是一个或多个子程序或函数,我们通过调用这些子程序和函数来完成一些特定的任务。
在Dll项目中创建子程序和函数的方法跟一般Fortran项目文件中的没有太大的差别,只需在子程序或函数开始时加入如下一些微软扩展属性编译伪指令即可:
!
MS$attributesdllexport
MS$attributesalias
MS$attributesvalue
MS$attributesreference
例如,如果要编写一个计算双精度实数加法的子程序,子程序名为subplus,输入参数为a和b,输出参数为c,则完整的源程序可以这样写:
subroutinesubplus(a,b,c)
MS$attributesdllexport:
:
subplus
MS$attributesalias:
'
subplus'
subplus
MS$attributesvalue:
a,b
MS$attributesreference:
c
real(8):
a,b,c
c=a+b
return
endsubroutinesubplus
一般情况下我们将输入参数定义为传递数值方式,而将输出变量定义为传递地址方式。
像这样添加一些子程序函数,然后可以将他们编译和生成dll文件(快捷键
是F7)。
之后在该项目文件目录下的debug文件夹中可以找到这个以项目名称命名的dll文件,我们可以在VB环境中调用它。
四、VB2005中对动态链接库的调用
VB对动态链接库的调用如同对普通子程序或函数的调用,在调用之前必须先对Dll中的子程序或函数声明。
声明格式如下:
[Public|Private]DeclareSub|functionNameLib“Libname”[Alias“aliasname”][([arglist])]
例如在C盘根目录下有一个名为mathfunction.dll的动态链接库,我们对这个库中名为subplus的子程序的声明如下:
PublicDeclareSubsubplusLib"
C:
\mathfunction.dll"
(ByValaAsDouble,ByValbAsDouble,ByrefcAsDouble)
在声明之后这些函数或过程就可以向普通的函数或过程一样在VB环境下调用了。
五、实验内容
用Fortran编写一个Dll文件,其中包含计算两个双精度实数加、减、乘、除的过程和函数,而后在VB环境下设置简单的界面,通过调用这些过程和函数来完成两个输入双精度实数的加、减、乘、除运算,并将计算结果显示出来。
1、Fortran中创建一个名为mathfunction的Dll项目,在项目中添加一个名为mathfunction的固定格式源文件,添加如下代码:
*************subroutine********************
subroutinesubsubtract(a,b,c)
subsubtract
subsubtract'
subsubtract!
c=a-b
endsubroutinesubsubtract
subroutinesubmultiply(a,b,c)
submultiply
submultiply'
submultiply!
c=a*b
endsubroutinesubmultiply
subroutinesubdivide(a,b,c)
subdivide
subdivide'
subdivide
c=a/b
endsubroutinesubdivide
而后在项目中另添加一个名为mathfunction2的固定格式源文件,添加如下代码:
*************function********************
functionfunplus(a,b)
funplus
funplus'
funplus
a,b,funplus
funplus=a+b
endfunctionfunplus
functionfunsubtract(a,b)
funsubtract
funsubtract'
funsubtract
a,b,funsubtract
funsubtract=a-b
endfunctionfunsubtract
functionfunmultiply(a,b)
funmultiply
funmultiply'
funmultiply
a,b,funmultiply
funmultiply=a*b
endfunctionfunmultiply
functionfundivide(a,b)
fundivide
fundivide'
fundivide
a,b,fundivide
fundivide=a/b
endfunctionfundivide
编写好源代码后编译生成Dll文件。
随后我们会在该项目所在目录下的debug文件夹中找到这个名为mathfunction.dll的文件。
将这个Dll文件拷贝到C:
\WINDOWS\System。
2在VB2005中新建一个名为vb_fortran的WindowsApplication项目,设计界面,添加三个Label,三个Textbox和四个Button,
在代码编辑器中输入以下代码:
PublicClassForm1
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
DimaAsDouble
DimbAsDouble
DimcAsDouble
a=CDbl(TextBox1.Text)
b=CDbl(TextBox2.Text)
Callsubplus(a,b,c)
c=funplus(a,b)
TextBox3.Text=c
EndSub
PrivateSubButton2_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton2.Click
Callsubsubtract(a,b,c)
c=funsubtract(a,b)
PrivateSubButton3_Click(ByValsenderAsSystem.Object,ByValeAs
System.EventArgs)HandlesButton3.Click
Callsubmultiply(a,b,c)
c=funmultiply(a,b)
PrivateSubButton4_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton4.Click
Callsubdivide(a,b,c)
c=fundivide(a,b)
EndClass
上面的代码也很简单。
代码中将对过程的调用注释掉了,因为这里对过程和对函数的调用结果是一样的,任选其一都可以,注意调用的格式就可以了。
在项目文件中添加一个模块文件,输入以下代码:
ModuleModule1
mathfunction.dll"
(ByValaAsDouble,
ByValbAsDouble,ByrefcAsDouble)
PublicDeclareSubsubsubtractLib"
(ByValaAsDouble,ByValbAsDouble,ByRefcAsDouble)
PublicDeclareSubsubmultiplyLib"
PublicDeclareSubsubdivideLib"
PublicDeclareFunctionfunplusLib"
(ByValaAsDouble,ByValbAsDouble)AsDouble
PublicDeclareFunctionfunsubtractLib"
(ByValaAsDouble,ByValbAsDouble)AsDouble
PublicDeclareFunctionfunmultiplyLib"
PublicDeclareFunctionfundivideLib"
EndModule
3保存并编译项目文件,然后执行文件。
程序运行时,在文本框Textbox1和textbox2中输入两个参数,通过Button控件对其进行某种数学运算操作,则在文本框textbox3中会正确的显示出结果来。
要注意的一点是,如果mathfunction.dll没有拷贝到C:
\WINDOWS\System,程序运行时会提示出错。
当然也不必一定要将mathfunction.dll拷贝到C:
\WINDOWS\system,只需在模块文件中声明函数或过程时在库文件名前加上完整的驱动器名和路径即可。
当然还有另外一种方法,就是直接将Dll文件拷贝到VB项目所在目录下的bin\Debug文件夹中。
六、结论
实践表明,VB和FORTRAN混合编程技术,为软件开发工作者开发具有良好运行界面并具有精确、高效运算功能的软件系统提供了技术支持,为充分利用现有优秀的FORTRAN程序代码资源,为不同单位之间协作攻关,以及使用不同
编程工具的软件设计人员协作开发可靠高效、界面友好的软件系统提供了技术途径。
软件开发人员在可视化编程中可以调用各种其它语言编写的动态链接库,但在调用过程中须注意两种语言间的调用约定的协调,包括标识符命名、参数传递方式、参数数据类型、参数在堆栈中的排列顺序等,以及动态链接库的导出和导入声明,从而成功地实现两种语言的混合编程。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB Fortran 混合 编程