主题:[讨论]vb调用fortran的DLL
seais1314
[专家分:0] 发布于 2011-03-24 22:32:00
第一次用VB调用一个FORTRAN动态链接库,老出错!而且还先用一个非常简单的程序进行测试!
总是找不到入口点!真的有点绝望了,贴子看N多,中文的,英文的。。。
试了N多方法!还是不行,要准备跳楼的时候,奇迹发生了!
行了!突然有种想哭的冲动。。。喜极而泣
两天来一直在搞这个,啥也没搞!幸好运行成功了!
大家有经验的交流一下呀!交流一下为什么老出错?我出错的主要原因应该是按值和地址传输出错了!
我的软件版本是 Microsoft.Visual.Studio.2005.简体中文正式版
Intel.Visual.Fortran.Compiler.Professional.v11.1.038
我在想:是不是软件版本比VB6.0与其它版本的FORTRAN编译器要高,有些语言规则变了,按着相同的方法就没办法进行调用了?或者新旧版本有什么区别,望请专家指教!
谁有系统一点的资料分享一下呀!
[em2]
回复列表 (共13个回复)
沙发
零维空间 [专家分:0] 发布于 2011-03-25 08:17:00
你好,我也遇到过你的情况,用VB.net调用Fortran,可是一直没成功。您能把你的代码贴出来吗?大家分享一下。谢谢了!!
板凳
臭石头雪球 [专家分:23030] 发布于 2011-03-25 09:19:00
Fortran 是传址的,如果是因为传值和传址问题,不会是找不到入口。
找不到入口应该是不同编译器对导出函数命名不同引起的。这个要看具体编译器的设置
3 楼
零维空间 [专家分:0] 发布于 2011-03-25 09:51:00
请问,如果用的是 Microsoft.Visual.Studio.2005.简体中文正式版
Intel.Visual.Fortran.Compiler.Professional.v11.1.038
需要设置哪些选项?
4 楼
seais1314 [专家分:0] 发布于 2011-03-25 10:43:00
哈哈,,,今天上午搞终于明白了!
你说的是对的,不同编译器输入出函数名不一样,这样就会导致找不到入口点!在确定VB按地址传递的基础,还要保证函数名一致!
5 楼
seais1314 [专家分:0] 发布于 2011-03-25 10:45:00
6 楼
seais1314 [专家分:0] 发布于 2011-03-25 10:45:00
[quote]
请问,如果用的是 Microsoft.Visual.Studio.2005.简体中文正式版
Intel.Visual.Fortran.Compiler.Professional.v11.1.038
需要设置哪些选项?[/quote]
我的问题解决了,你是什么问题呀?
我不明白你说的选项是什么意思?你对FORTRAN熟悉吗?
7 楼
零维空间 [专家分:0] 发布于 2011-03-25 14:18:00
自学了一段时间,感觉还可以吧。
我把代码贴出来,麻烦你帮我看看。谢谢了!!!
下面是Fortran程序的开始部分:
Subroutine wellparameter(dl,Y)
! MS $ attributes alias:'wellparameter'::wellparameter
! MS $ attributes dllexport::wellparameter
PARAMETER(N=4)
DIMENSION Y(N)
real dl
下面是VB.NET程序的一部分:
模块代码:
Module Module1
Declare Sub wellparameter Lib "E:\wellparameter\debug\wellparameter.dll" (ByRef dl As Single, ByRef y As Single)
End Module
计算按钮的点击代码:
Private Sub Command1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Command1.Click
Dim dl As Single
Dim y(0 To 4) As Single
dl = Val(txtInput.Text)
Call wellparameter(dl, y(1))
txtOutput1.Text = y(1)
txtOutput2.Text = y(2)
txtOutput3.Text = y(3)
txtOutput4.Text = y(4)
End Sub
8 楼
seais1314 [专家分:0] 发布于 2011-03-25 14:31:00
你这个数组上下限应该错了吧!VB是从0开始到4,那就是5个,而FORTRAN是默认从1开始到4,那么就是4个!
不知道是不是这个问题!
9 楼
零维空间 [专家分:0] 发布于 2011-03-25 15:42:00
数组下限可能也有问题。不过我换成编写一个简单的函数,也是调用不成功。还有就上我以前做是提示找不到入口点,由于我调了一些VB2005.net的设置,不但不能调用也不提示找不到入口点了。
你能把你的例子贴出来看看吗?要是太复杂了,你举个简单例子也行。如y=x+10
还有就是,有的资料是用 !DEC$,而有的是用 !MS$ ,请问这有什么区别吗?
我的QQ:1106393549.方便的话,可以QQ聊。谢谢了!!
10 楼
cgl_lgs [专家分:21040] 发布于 2011-03-29 15:31:00
!DEC$的是CVF
!MS$的是PSF
我来回复