回 帖 发 新 帖 刷新版面

主题:求助 vb fortran 混合编程。

非常简单,使用VB调用fortran的dll。 各种书都说,只要把vb数组的第一个元素地址传给fortran就好了。我使用vb。net测试了下面的程序,它工作的很好。可是用vb .60时,就有问题了。传入fortran的数组第一个元素是对的,后面的元素都丢了。 因此,fortran再返回来的数都是错的了。 即下面程序中,mya 传入 fortran后 mya(1)  (也就是vb中的 mya(0))是正确的,mya(2)就是诸如2.234234e-43这样的怪东西了。奇怪的是,这样的代码在vb.net中正常的很。 有人有办法解决或者遇到类似问题没? 我试过 cvf 和 ivf11 结果都一样。 希望高手解答!

the code as:

in vb:

Private Declare Sub Dll2 Lib "d:\Dll2.dll" (ByRef a As Single, ByRef b As Single, ByRef n As Long)


Private Sub Command1_Click()
Dim mya(1) As Single
Dim myb(1) As Single
Dim n As Long
mya(0) = 1.01
mya(1) = 1.1
myb(0) = 3.1
myb(1) = 4.1
n = 2
Call Dll2(mya(0), myb(0), n)
aa = myb(1)
End Sub


in fortran:

module testdll
IMPLICIT NONE
contains
subroutine Dll2(a,b,n)
  ! Expose subroutine Dll2 to users of this DLL
  !DEC$ ATTRIBUTES   :: Dll2
  !DEC$ ATTRIBUTES DLLEXPORT,ALIAS: "Dll2":: Dll2
integer n
real   a(n)
real b(n)
b(1)=a(1)
b(2)=a(2)
end subroutine Dll2
end module

回复列表 (共3个回复)

沙发

在查看了mltx的其他回复后。似乎意识到问题了。 有可能是我在测试时 写作了:
Dim mya(1),myb(1) As Single
因为程序是在办公室编的。那边没办法上网,这个帖子里的dim 与我实际的dim不一致。。
等不及了,现在就回办公室试试去。。

板凳


已经验证了。 就是那个问题!

3 楼

多谢楼主,困扰我多日的参数传递,有了解决办法了

我来回复

您尚未登录,请登录后再回复。点此登录或注册