以文本方式查看主题 - Fortran中文网 (http://fortran.cn/bbs/index.asp) -- Fortran语言开发经验交流 (http://fortran.cn/bbs/list.asp?boardid=3) ---- [求助]VBA调用Fortran DLL找不到入口 的问题 (http://fortran.cn/bbs/dispbbs.asp?boardid=3&id=2221) |
-- 作者:luna125 -- 发布时间:2011/2/10 22:57:48 -- [求助]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编辑过]
|
-- 作者:luna125 -- 发布时间:2011/2/11 19:09:08 -- 今天又分析了半天,终于解决了这个问题 原来是调用函数名称大小写的问题 Fortran编译成的Dll函数默认名都是大写的,没有注意到这个!所以才出现之前的问题! 虽然这个问题解决了,但是又有了新问题。 在此在想大家提一下: 我上面的那个程序,其实是个试验测试用的代码。真正要编译的代码比这复杂的多,Fortran源码里有一个主程序,若干子程序,主程序会在需要的时候随时调用子程序,调试了一下,程序能够正确运行。随后就把代码修改成Dll格式的,and这主程序和这些子程序编译成了一个Dll,然后用了一个excel VBA里的窗体按钮调用了这个dll,运行之后发现,这个dll确实被调用了,而且dll的功能也实现了(从输出的文本文件可以看出来,所需要的文件都输出了,结果也对!),但是VBA程序出现了致命错误:excel 应用程序窗口出错,excel需要关闭。现在问题就卡在了这里,也不知道是什么原因! |