其中n表示在子程序中参数
列表中所有参数占用的字节大小整型和实型各占4个字节双精度型DOUBLE占8个字节例1SUBROUTINEmysub1(x,y,z,k)cDEC$ATTRIBUTESSTDCALL::mysub1REALx,yDOUBLEzINTEGERk则在生成的DLL接口中,子程序默认名字为mysub1@20为了避免调用约定对生成的子程序名字的影响可以使用别名属性ALIAS来指定生成的子程序别名从而忽略调用约定对子程序名的影响例2在例1的调用约定声明中加上别名属性即cDEC$ATTRIBUTESSTDCALLALIAS:mysub1::mysub1则在生成的DLL中,子程序名字变为mysub1而不是mysub1@20从而避免了调用约定对生成的子程序名字的影响1.3子程序的导出要使生成的子程序能被Delphi调用,还要通过指定DLLEXPORT属性来导出这些子程序例3cDEC$ATTRIBUTESDLLEXPORT::mysub11.4参数的传递方式在Delphi和Fortran的DLL之间可以使用的参数传递方式有两种值传递和引用传递传递的是参数的地址通过调用子程序可以改变实参的值其中数组永远都是通过引用传递的而其他参数的传递方式则随着调用约定的不同而不同在缺省的调用约定下参数通过引用传递而在STDCALL的调用约定下参数则通过值传递为了避免调用约定对参数传递方式的影响可以指定参数的VALUE或REFERENCE属性被VALUE属性所声明的变量一律通过值传递而被REFERENCE属性所声明的变量则一律通过引用传递例4SUBROUTINEmysub1(x,y,z,k)cDEC$ATTRIBUTESSTDCALLALIAS:mysub1::mysub1cDEC$ATTRIBUTESDLLEXPORT::mysub1cDEC$ATTRIBUTESVALUE::x,ycDEC$ATTRIBUTESREFERENCE::zREALx,yDOUBLEzINTEGERk则XY通过值传递Z通过引用传递K通过值传递受到调用约定的影响
_______________________________________________________________________________中国科技论文在线www.paper.edu.cn
2ActiveForm技术
Delphi下的ActiveXForm控件是基于ActiveX技术标准的一种窗体控件类似于Form窗体可以用来开发WEB页下的应用程序界面实现跨平台和远程计算2.1ActiveForm的创建打开Delphi在FILE菜单中选择NEWOTHER在打开的NewItems对话框中单击ActiveX选项卡从中选择ActiveForm此时会弹出一个对话框用于输入你所建立ActiveXForm控件的名称l程序单元名称项目名称等还有一些ActiveX包含版本控制编号等可选项可以按缺省的设置直接点击ok即可在生成的ActiveForm窗体控件中添加一些需要的组件如编辑框按钮播放器等编写相关的回调子程序选择PROJECT菜单下的compileBuildProject1命令来编译这个ActiveForm然后通过选择RUN菜单下的RegisterActiveXServer选项将这个ActiveX控件
注册到
计算机上因为ActiveForm不仅仅是窗体更是一个ActiveX控件因此应当把它注册到计算机上打开PROJECT菜单下的WebDeploymentOptions选项,设置相关的文件路径信息如窗体控件的位置生成的网页的位置等选择PROJECT菜单下的WebDeploy选项,在弹出的提示框中选yest
oall即可此时会形成一个类似于图1的网页可以在浏览器下方便地运行这个计算程序
图1
非标准大气计算程序网络版用户界面
2.2在ActiveForm中调用DLL为完成相关的计算功能可以声明并调用Fortran下的DLL子程序为此需要在ActiveForm的单元文件中implementation关键字之前VAR关键字之后对需要调用的DLL进行以下三个方面的声明2.2.1调用约定的声明在Delphi中可以用到的调用约定有缺省约定STDCALLPASCALREGISTERCDCELSAFECALL等考虑到与Fortran的兼容可以使用缺省约定或STDCALL并且要保证与Fortran的调用约定相一致2.2.2DLL的路径声明要在Delphi中使用DLL中的子程序要保证Delphi程序能找到这个DLL和它里面的相关子程序这要通过声明EXTERNAL属性来完成可以采用以下两种方法1.通过子程序名或别名来声明Externalc:\mysoft\mysub.dll2.通过在声明中指定函数或过程的位置可以提高DLL的加载速度例如
_________________________________