回 帖 发 新 帖 刷新版面

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

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

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

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

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

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

回复列表 (共13个回复)

沙发


你好,我也遇到过你的情况,用VB.net调用Fortran,可是一直没成功。您能把你的代码贴出来吗?大家分享一下。谢谢了!!

板凳

Fortran 是传址的,如果是因为传值和传址问题,不会是找不到入口。

找不到入口应该是不同编译器对导出函数命名不同引起的。这个要看具体编译器的设置

3 楼


请问,如果用的是 Microsoft.Visual.Studio.2005.简体中文正式版
          Intel.Visual.Fortran.Compiler.Professional.v11.1.038

需要设置哪些选项?

4 楼


哈哈,,,今天上午搞终于明白了!
你说的是对的,不同编译器输入出函数名不一样,这样就会导致找不到入口点!在确定VB按地址传递的基础,还要保证函数名一致!

5 楼


6 楼

[quote]
请问,如果用的是 Microsoft.Visual.Studio.2005.简体中文正式版
          Intel.Visual.Fortran.Compiler.Professional.v11.1.038

需要设置哪些选项?[/quote]



我的问题解决了,你是什么问题呀?
我不明白你说的选项是什么意思?你对FORTRAN熟悉吗?

7 楼


自学了一段时间,感觉还可以吧。
我把代码贴出来,麻烦你帮我看看。谢谢了!!! 
 下面是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 楼

你这个数组上下限应该错了吧!VB是从0开始到4,那就是5个,而FORTRAN是默认从1开始到4,那么就是4个!
不知道是不是这个问题!

9 楼

数组下限可能也有问题。不过我换成编写一个简单的函数,也是调用不成功。还有就上我以前做是提示找不到入口点,由于我调了一些VB2005.net的设置,不但不能调用也不提示找不到入口点了。
你能把你的例子贴出来看看吗?要是太复杂了,你举个简单例子也行。如y=x+10
还有就是,有的资料是用 !DEC$,而有的是用 !MS$ ,请问这有什么区别吗?
我的QQ:1106393549.方便的话,可以QQ聊。谢谢了!!

10 楼

!DEC$的是CVF
!MS$的是PSF

我来回复

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