[VB6 ] Dll档呼叫规格错误

楼主: dogs1231992 (河豚)   2015-01-24 04:11:54
最近在整合Fortran跟VB6的时候发生Dll档怎样也挂不上去的状况
找了很多资料还是无法找到正确解答
只好上来求助乡民们了Q___Q
我在测试的时候 写了一个Fortran档
内容为
real function circle_area(radius)
!DEC$ ATTRIBUTES DLLEXPORT :: CIRCLE_AREA
!DEC$ ATTRIBUTES ALIAS : "Circle_Area" :: CIRCLE_AREA
implicit none
real radius
real, parameter :: PI = 3.14159
circle_area = radius*radius*PI
return
end function
接着用g95跟dlltool来编译,产生 .o .dll .def三种档案
由.def中可以得知进入的端口是 circle_area__
因此我在VB6里面写
Private Declare Function circle_area__ Lib "forlib.dll" (r As Single) As Single
Private Sub Command1_Click()
Dim r As Single
Dim a As Single
r = Val(Text1.Text)
a = circle_area__(r)
Label3 = Str(a)
End Sub
结果,在执行时,一直显示 a = circle_area__(r) 这行有问题
跟我说 "呼叫规格错误"
我上网找了很多范例,但是都没有看到这部分的说明
不知道是编译dll档的过程出了问题还是程式码叙述不对?
希望有强者可以救救小弟Q___Q
我的g95跟dlltool的指令是
1. 产生.o档
-c $(FileName) -Wuninitialized -Wimplicit-none -Wunused-vars -Wunset-vars
-fbounds-check -ftrace=full -O2
2. 产生.def档
-z $(FileTitle).def
作者: chinoyan   2015-01-26 21:44:00
r = Val(Text1.Text) 改 r = CSNG(Text1.Text),试试
楼主: dogs1231992 (河豚)   2015-01-27 21:32:00
小弟找到问题了 官方给的资料错误产生.dll档那行指令 应该改成-shared -mrtd -o $(FileTitle).dll $(FileTitle).f90 (而不是.o只要改了这项之后就可以正常编译了除了def档需要用dlltool以外,其余都用g95即可
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-01-28 16:23:00
.o不是Unix的obj档名吗 这个link步骤看得真头昏 @@
楼主: dogs1231992 (河豚)   2015-01-28 20:30:00
M大 其实只要执行最后一个指令就好,会直接产生dll档然后就可以直接挂载到VB上

Links booklink

Contact Us: admin [ a t ] ucptt.com