回 帖 发 新 帖 刷新版面

主题:[讨论]vb调用fortran的DLL

第一次用VB调用一个FORTRAN动态链接库,老出错!而且还先用一个非常简单的程序进行测试!
总是找不到入口点!真的有点绝望了,贴子看N多,中文的,英文的。。。
试了N多方法!还是不行,要准备跳楼的时候,奇迹发生了!
行了!突然有种想哭的冲动。。。喜极而泣
两天来一直在搞这个,啥也没搞!幸好运行成功了!

大家有经验的交流一下呀!交流一下为什么老出错?我出错的主要原因应该是按值和地址传输出错了!

我的软件版本是 Microsoft.Visual.Studio.2005.简体中文正式版
          Intel.Visual.Fortran.Compiler.Professional.v11.1.038

我在想:是不是软件版本比VB6.0与其它版本的FORTRAN编译器要高,有些语言规则变了,按着相同的方法就没办法进行调用了?或者新旧版本有什么区别,望请专家指教!

谁有系统一点的资料分享一下呀!
[em2]

回复列表 (共13个回复)

11 楼

你好,最近也在学习利用VB调用Fortran编好的DLL程序,也是出现你说的那个问题,在声明中检查了许久,一直没有找到问题所在。我用的是CVF6.6和VB6.0,也是出现找不到入口节点,如果在声明中添加Private,运行时会出现子程序或函数未定义。希望各位高手帮忙解决,再次非常感谢,因为这个问题一直困扰我很久了。
下面是程序代码:
subroutine wellparameter (d1,Y)
! DEC $attributes alias:'wellparameter'::wellparameter
! DEC $attributes dllexport :: wellparameter    
PARAMETER (N=4)  
DIMENSION Y(N)
real d1
pwh=29*10**6
qd=24*10**4.0
t0=66
rg=0.599
pi=3.1415
R=8315
qmol=29*rg
d=d1/1000    
pc=(4.7781-0.2482*rg)*10**6
tc=92.2222+176.6667*rg
Y(3)=pwh
Y(4)=t0
pr=Y(3)/pc
tr=(Y(4)+273)/tc                     
Zg=1
Do 100 i1=1,5             
   denr=0.27*pr/(Zg*tr)
   y1=(0.31506-1.0467/tr-0.5783/tr**3.0)*denr
   y2=(0.5333-0.6127/tr+0.6185/tr**3.0)*denr**2.0
   Zg=1.0+y1+y2
100     CONTINUE
dens0=qmol*Y(3)/(R*(Y(4)+273)*Zg)
v0=(qd/86400)*((Y(4)+273)/293)*(0.101/(Y(3)/10**6))*Zg*4/pi*(1.0/d**2.0)
Y(2)=v0
Y(1)=dens0
end subroutine wellparameter
VB代码是:
Private Declare Sub wellparameter Lib "E:\wellparameter.dll" (d1 As Single, y As Single)
Private Sub Command1_Click()
Dim d1 As Single
Dim y(1 To 4) As Single
d1 = Val(txtInput.Text)
Call wellparameter(d1, y(1))
txtOutput1.Text = y(1)
txtOutput2.Text = y(2)
txtOutput3.Text = y(3)
txtOutput4.Text = y(4)
End Sub
Private Sub Command2_Click()
End
End Sub
我怀疑是不是编译器之间的链接有问题,还是有些调用之间的规则还不了解,我也看过很多人写的期刊论文,可按照人家上面的示例去编,依然还是有这种情况,不过我对这个问题还是有信心,相信我们能够把它解决了,先谢谢你们!

12 楼

用depend程序打开那个dll看看是否成功导出了:)

13 楼

11l没按语法规则写当然不能成功导出了

! DEC $attributes alias:'wellparameter'::wellparameter
! DEC $attributes dllexport :: wellparameter    

改为

!DEC$ attributes alias:'wellparameter'::wellparameter
!DEC$ attributes dllexport :: wellparameter    

不知道你$后面紧跟attributes想干啥

我来回复

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