Fortran Coder

查看: 10866|回复: 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] 纯文本查看 复制代码
01Private Declare Sub Dll2 Lib "d:\Dll2.dll" (ByRef a As Single, ByRef b As Single, ByRef n As Long)
02 
03Private Sub Command1_Click()
04Dim mya(1) As Single
05Dim myb(1) As Single
06Dim n As Long
07mya(0) = 1.01
08mya(1) = 1.1
09myb(0) = 3.1
10myb(1) = 4.1
11n = 2
12Call Dll2(mya(0), myb(0), n)
13aa = myb(1)
14End Sub

in fortran:
[Fortran] 纯文本查看 复制代码
01module testdll
02IMPLICIT NONE
03contains
04subroutine Dll2(a,b,n)
05  ! Expose subroutine Dll2 to users of this DLL
06  !DEC$ ATTRIBUTES   :: Dll2
07  !DEC$ ATTRIBUTES DLLEXPORT,ALIAS: "Dll2":: Dll2
08integer n
09real   a(n)
10real b(n)
11b(1)=a(1)
12b(2)=a(2)
13end subroutine Dll2
14end module


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

955

帖子

0

主题

0

精华

大师

F 币
188 元
贡献
77 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2014-6-2 13:32:06 | 只看该作者
我这里没有 VB6.0 ,只有VS,试了一下VB.NET 没有问题。

下载了一个 VB6 精简版,也没问题。

QQ截图20140602133056.gif (34.6 KB, 下载次数: 497)

QQ截图20140602133056.gif

2

帖子

1

主题

0

精华

新人

F 币
13 元
贡献
6 点
板凳
 楼主| 发表于 2014-6-2 21:31:26 | 只看该作者
感谢! 我发现问题了! 其实我测试时写成了 Dim mya(1),myb(1) As Single

那样的话,导致在.net中正常,而vb6.0中就不对了。

955

帖子

0

主题

0

精华

大师

F 币
188 元
贡献
77 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
地板
发表于 2014-6-2 21:34:42 | 只看该作者
OK ,发现了就好。

3

帖子

0

主题

0

精华

新人

F 币
22 元
贡献
6 点
5#
发表于 2015-12-15 00:07:12 | 只看该作者
楼主好,我跟你遇到了同样的问题,并且复制的代码也是运行不了

3

帖子

0

主题

0

精华

新人

F 币
22 元
贡献
6 点
6#
发表于 2015-12-15 00:07:37 | 只看该作者
葫芦055 发表于 2015-12-15 00:07
楼主好,我跟你遇到了同样的问题,并且复制的代码也是运行不了

复制了你的代码

3

帖子

0

主题

0

精华

新人

F 币
22 元
贡献
6 点
7#
发表于 2015-12-15 00:10:06 | 只看该作者

vb.net也不行

20

帖子

4

主题

0

精华

入门

F 币
97 元
贡献
48 点
8#
发表于 2017-1-13 14:19:11 | 只看该作者

你试一下我这个例子。
Fortran的dll:
[Fortran] 纯文本查看 复制代码
01subroutine suba(a,b,c)
02!DEC$ ATTRIBUTES stdcall,DLLEXPORT ::suba
03!DEC$ ATTRIBUTES ALIAS:"suba"::suba
04!DEC$ ATTRIBUTES reference :: a,b,c
05    implicit none
06    real::a
07    real::b
08    real::c
09    c=a+b
10end subroutine


vb6.0的代码:
[Visual Basic] 纯文本查看 复制代码
01Private Declare Sub suba Lib "D:\try_for\try_vb\c_dll\Dll1\Dll1\Debug\Dll1.dll" (ByRef a As Single, ByRef b As Single, ByRef c As Single)
02Private Sub Command1_Click()
03        Dim a As Single
04        Dim b As Single
05        Dim c As Single
06        a = 1#
07        b = 2#
08        Call suba(a, b, c)
09        Text1.Text = c
10End Sub


运行结果如下图:

0.jpg (10.24 KB, 下载次数: 518)

0.jpg

1.jpg (9.88 KB, 下载次数: 497)

1.jpg
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2025-4-30 12:39

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

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