dvbbs
收藏本页
联系我们
论坛帮助
dvbbs

>> Fortran语言开发经验交流
搜一搜更多此类问题 
Fortran中文网Fortran中文网—Fortran语言经验交流Fortran语言开发经验交流 → [求助]VBA调用Fortran DLL找不到入口 的问题

您是本帖的第 5452 个阅读者
树形 打印
标题:
[求助]VBA调用Fortran DLL找不到入口 的问题
luna125
帅哥哟,离线,有人找我吗?
等级:新手上路
文章:4
积分:235
门派:无门无派
注册:2011年2月9日
楼主
 用支付宝给luna125付款或购买其商品,支付宝交易免手续费、安全、快捷! 点击这里发送电子邮件给luna125

发贴心情
[求助]VBA调用Fortran DLL找不到入口 的问题
大家好,我在VBA中调用Fortran 编译的DLL时,出现错误:提示找不到入口函数!
我检查了几遍代码,也没看出什么问题!这里专家高手云集,希望能指点一下!
下面是我的代码:
1 、Fortran DLL源码:
      subroutine circle_area(radius,c_a)
!DEC$ ATTRIBUTES DLLEXPORT Alias "circle_area":: circle_area
!DEC$ ATTRIBUTES REFERENCE :: radius
!DEC$ ATTRIBUTES REFERENCE :: c_a
      implicit none
      real*4  :: radius
      real*4   :: c_a
      real, parameter :: PI = 3.14159      
    
      c_a = radius*radius*PI    
!        print*,c_a
      return
      end subroutine
2、VBA里代码
   声明部分:
   Option Explicit  
   Public Declare Sub circle_area Lib "I:\S2_yaqiji\test\Release\test.dll" (ByRef R As Single, ByRef A As Single)    
    调用部分:
   Private Sub CommandButton4_Click()
            Dim R As Single
            Dim A As Single
            R = 10
           Call circle_area(R, A)        
           MsgBox "调用了Test.dll,在半径为10时,计算面积A=" & A
     End Sub
4、在VBA里运行程序,出现如此的错误提示:
      运行时错误'453’
      找不到DLL输入点 circle_area ,在 I:\s2\.....\test.dll中!
点击浏览该文件
附件里有fortran代码和调用dll的VBA窗体代码(运行窗体后点击TestDLL就可以调用本dll)
[此贴子已经被作者于2011-2-10 22:59:57编辑过]
ip地址已设置保密
2011/2/10 22:57:48
luna125
帅哥哟,离线,有人找我吗?
等级:新手上路
文章:4
积分:235
门派:无门无派
注册:2011年2月9日
2
 用支付宝给luna125付款或购买其商品,支付宝交易免手续费、安全、快捷! 点击这里发送电子邮件给luna125

发贴心情
今天又分析了半天,终于解决了这个问题
原来是调用函数名称大小写的问题
Fortran编译成的Dll函数默认名都是大写的,没有注意到这个!所以才出现之前的问题!
虽然这个问题解决了,但是又有了新问题。
在此在想大家提一下:
我上面的那个程序,其实是个试验测试用的代码。真正要编译的代码比这复杂的多,Fortran源码里有一个主程序,若干子程序,主程序会在需要的时候随时调用子程序,调试了一下,程序能够正确运行。随后就把代码修改成Dll格式的,and这主程序和这些子程序编译成了一个Dll,然后用了一个excel VBA里的窗体按钮调用了这个dll,运行之后发现,这个dll确实被调用了,而且dll的功能也实现了(从输出的文本文件可以看出来,所需要的文件都输出了,结果也对!),但是VBA程序出现了致命错误:excel 应用程序窗口出错,excel需要关闭。现在问题就卡在了这里,也不知道是什么原因!
ip地址已设置保密
2011/2/11 19:09:08

 2   2   1/1页      1    
网上贸易 创造奇迹! 阿里巴巴 Alibaba
Powered By Dvbbs Version 7.1.0 Sp1
Copyright ©2005 - 2008 www.fortran.cn
页面执行时间 0.10352 秒, 5 次数据查询
京ICP备05056801号