Fortran Coder

查看: 10030|回复: 7
打印 上一主题 下一主题

[混编] 有人熟悉fortranVB混合的没?我遇到奇怪问题了。

[复制链接]

2

帖子

1

主题

0

精华

新人

F 币
13 元
贡献
6 点
跳转到指定楼层
楼主
发表于 2014-6-2 11:47:50 | 显示全部楼层 |只看大图 回帖奖励 |倒序浏览 |阅读模式
非常简单,使用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:
[Visual Basic] 纯文本查看 复制代码
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:
[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


分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2

帖子

1

主题

0

精华

新人

F 币
13 元
贡献
6 点
沙发
 楼主| 发表于 2014-6-2 21:31:26 | 显示全部楼层
感谢! 我发现问题了! 其实我测试时写成了 Dim mya(1),myb(1) As Single

那样的话,导致在.net中正常,而vb6.0中就不对了。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-26 23:58

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表