_______________________________________________________________________________www.paper.edu.cn
Delphi下ActiveXForm控件与混合编程技术研究
魏志强谷润平谢春生
天津300300)(中国民航空管
摘要Fortran语言可以用来编制高效复杂的科学计算
程序但它的界面
设计工作比较复杂利用Delphi下的ActiveXform控件采用混合编程的方法能够开发出可在浏览器下直接运行的计算程序实现Fortran计算程序的可视化和
网络化达到远程计算和调用的目的关键词混合编程ActiveXFormDLL(动态链接库)远程计算
ThemethodtodeveloptheFortranProgramsusedinWebs
WeiZhi-qiang,GuRun-pingXieChun-sheng
(AirTrafficManagementcollege,CAUC,Tianjin,300300,China)AbstractThisarticleanalysesthemethodtodeveloptheprogramusedinIE.Fortranisapowerfulprogramminglanguageforcalculationsinmanyscientificfields,butitisdifficulttodevelopthevisualprogramusedinIE.Forthis,wecanuseDelphiandthemixed-languageprogrammingtechnicaltoimproveit.KeyWordsmixed-languageprogrammingActiveXformdynamiclinklib
raryDLL
Webcalculations
0引言
Fortran是数值计算领域的主导语言大量的科学与工程计算程序都是用Fortran语言编写的但是相对而言利用Compaq公司推出的VisualFortran6.5以下简称VF6.5开发工具来设计用户界面是[4][5]比较复杂的而且设计出的用户界面功能也不太强大Delphi是由Inprise原Borland公司推出的一种基于Object-Pascal语言功能强大使用灵活的快速应用程序开发工具RAD支持DLLActiveX等技术标准可以用来快速地开发出高效的用户界面甚至还能开发出可以在浏览器下运行的Web应用程序但无需质疑它的数值计算能力与FORTRAN相[3]比要逊色的多为了充分发挥Delphi和Fortran的长处目前许多混合编程方面的文章讨论了如何将FORTRAN下的数值计算或数据分析子程序编译为动态链接库(DynamicLinkLibrary简称DLL)在Delphi中通过调用这些[1][2]DLL以达到资源共享取长补短但是这些文章仅限于讨论如何制作单机版的用户界面程序本文以飞行性能中非标准大气的计算程序为例讨论如何利用Delphi下的ActiveXForm控件结合DLL技术来制作可以在浏览器下运行的计算程序实现远程计算和数据分析
1DLL
动态链接库
的设计
打开VF6.5或其他VisualFortran开发工具新建一个DLL工程在工程中新建一个扩展名为f90的自由格式文件编写子程序段以完成相关的计算功能为了能在Delphi中调用这些用Fortran编译出[4]的子程序应当编写相应的程序接口以规定子程序的调用方式子程序中参数的传递方法等相关的声明用ATTRIBUTES关键字进行,具体格式如下:cDEC$ATTRIBUTESatt[,att]::object[,object]其中参数c可以是Cc或*四个符号中的任意一个Att为有关的属性关键字通过对以下四个方面的属性进行声明可以使这些用FORTRAN开发出的DLL能被Delphi正确调用1.1调用约定的协调
_______________________________________________________________________________中国科技论文在线www.paper.edu.cn
参数att可表示调用约定的方式在Fortran下可以选择以下几个C主要用于FORTRAN和c++或汇编语言的接口声明STDCALL标准调用约定可以用在Fortran和
VBDELPHI等开发环境的接口声明缺省的调用方式(默认情况下):可以用在FORTRAN和VBDELPHI等开发环境的接口声明为了实现与Delphi的混合编程在Fortran中应当采用STDCALL或缺省的调用约定同时要保证与Delphi中的调用约定相互一致1.2子程序名的约定尽管在Fortran中和Delphi中都不严格区别大小写,但在混合编程时要确保DLL中的子程序名与Delphi中用到的子程序名完全一致在DLL接口中的默认标识符(子程序名)会随着调用约定的不同而不同调用约定CSTDCALL缺省默认标识符Subnamesubname@nSUBNAME@N大小写全部小写全部小写全部大写