Fortran与VB混合编程
吕洪波(作者网页)
1 概述
在DOS时代,许多水利专业程序用Fortran语言编制,随着WINdows时代的来临,面向对象的编程语言如VB、VC等已成为主流,尤其是VB以其简单实用成为许多水利工作者首选工具,而以前大量Fortran程序重新编写,困难重重,充分利用前人程序资源,较好的解决办法是Fortran 与VB混合编程。
2 操作平台
Fortran PowerStation 4.0,VB6.0(也可以是Visual Fortran,但本人手头没有,其接口约定不同,但类似)
3 主要方法
(1) 利用动态链接库,实现多语言混合编程。
(2) VB直接调用Fortran执行文件。
4 方法说明
4.1利用动态链接库方法
(1)在Fortran PowerStation 4.0下,编制可供VB调用的.dll文件,示例代码:
subroutine forcx(a,b,c)
!ms$if .not. defined(linkdirect)
!ms$attributes dllexport :: HWJSVB
!ms$endif
integer a,b,c
a=b+c
end
(2) 在VB下编写如下代码:
Private Declare Sub forcx B Lib "dll.dll" Alias "_ FORCX @12" (ByRef a As integer, ByRef b As integer, ByRef c As integer)
Sub callfor()
Dim a as integer, b as integer ,c as integer
B=1 : c=2
Call forcx(a,b,c)
End
Alias 的具体格式:“_函数名(全部大写)@字节数”,其中函数名是.dll中函数名,特别注意须全部大写,字节数指函数中的变量的字节总和,整形为4字节,共12字节。
4.2 直接调用执行文件法
这是一种最简单明了的办法,很使用,不必修改原程序,接口可通过读取数据文件方法处理,VB中直接调用shell函数即可。
Shell(pathname[,windowstyle])
Shell 函数的语法含有下面这些命名参数:
|
部分 |
描述 |
|
pathname |
必要参数。Variant (String),要执行的程序名,以及任何必需的参数或命令行变量,可能还包括目录或文件夹,以及驱动器。 |
|
Windowstyle |
可选参数。Variant (Integer),表示在程序运行时窗口的样式。如果 windowstyle 省略,则程序是以具有焦点的最小化窗口来执行的。 |
windowstyle 命名参数有以下这些值:
|
常量 |
值 |
描述 |
|
vbHide |
0 |
窗口被隐藏,且焦点会移到隐式窗口。 |
|
VbNormalFocus |
1 |
窗口具有焦点,且会还原到它原来的大小和位置。 |
|
VbMinimizedFocus |
2 |
窗口会以一个具有焦点的图标来显示。 |
|
VbMaximizedFocus |
3 |
窗口是一个具有焦点的最大化窗口。 |
|
VbNormalNoFocus |
4 |
窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动。 |
|
VbMinimizedNoFocus |
6 |
窗口会以一个图标来显示。而当前活动的的窗口仍然保持活动。 |
例如:call shell(“c:\windows\notpad.exe”,1)
后记:因时间仓促,以上仅给出基本方法说明,希望能给大家提供一种思路,如有不当之处希望同仁指出,谢谢。
2001.2.26
(转载请注明出处)