作者dogs1231992 (河豚)
看板Visual_Basic
标题[VB6 ] Dll档呼叫规格错误
时间Sat Jan 24 04:11:54 2015
最近在整合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 --export-all-symbols $(FileTitle).o
3.产生.dll档
-shared -mrtd -o $(FileTitle).dll $(FileTitle).o $(FileTitle).def
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.112.218.125
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Visual_Basic/M.1422043917.A.34D.html
1F:推 chinoyan: r = Val(Text1.Text) 改 r = CSNG(Text1.Text),试试 01/26 21:44
2F:→ dogs1231992: 小弟找到问题了 官方给的资料错误 01/27 21:32
3F:→ dogs1231992: 产生.dll档那行指令 应该改成 01/27 21:32
4F:→ dogs1231992: -shared -mrtd -o $(FileTitle).dll $(FileTitle).f9 01/27 21:33
5F:→ dogs1231992: 0 (而不是.o 01/27 21:33
6F:→ dogs1231992: 只要改了这项之後就可以正常编译了 01/27 21:33
7F:→ dogs1231992: 除了def档需要用dlltool以外,其余都用g95即可 01/27 21:34
8F:→ MOONRAKER: .o不是Unix的obj档名吗 这个link步骤看得真头昏 @@ 01/28 16:23
9F:→ dogs1231992: M大 其实只要执行最後一个指令就好,会直接产生dll档 01/28 20:30
10F:→ dogs1231992: 然後就可以直接挂载到VB上 01/28 20:30