主题:关于zhao311 的dll问题
老大徒伤悲
[专家分:29120] 发布于 2010-09-08 17:32:00
这就是zhao311 的源程序以及F语言所生成的dll文件。
请大家看看,应改如何解决?
回复列表 (共1个回复)
沙发
tanchuhan [专家分:15140] 发布于 2010-09-08 21:00:00
这个DLL不是ActiveX DLL,所以不能使用引用的方法调用,只能用声明的方法调用里面的导出函数,里面一共有3个导出函数:
[code=c]Circle_area
SUM
_SUM@4[/code]
一运行总是“Run-time error '53':File not found: lianxi.dll”,可文件明明在当前目录下,然后查看DLL引入表,发现它引用了其它DLL:
[code=c]DFORRT.dll 0190 _OtsMoveMinimum
DFORRT.dll 018E _OtsFill
DFORRT.dll 028F for_len_trim
DFORRT.dll 018F _OtsMove
MSVCRT.dll 009D _adjust_fdiv
MSVCRT.dll 0055 __dllonexit
MSVCRT.dll 0186 _onexit
MSVCRT.dll 025E free
MSVCRT.dll 0291 malloc
MSVCRT.dll 010F _initterm
KERNEL32.dll 005D DisableThreadLibraryCalls[/code]
然后去google这个文件:[url]http://www.dlldll.com/dforrt.dll_download.html[/url],下载回来放到当前目录下。
发现报“Run-time error '453':Can't find DLL entry point circle_area in lianxi.dll”,于是修正声明里的函数大小写:
[code=c]Private Declare Function Circle_area Lib "lianxi.dll" (r As Single) As Single
Private Declare Sub Makelower Lib "lianxi.dll" (ByVal s As String, ByVal i As Long)
Private Declare Function SUM Lib "lianxi.dll" (r As Long) As Long[/code]
以及楼主的拼写错误:
[code=c]Private Sub command1_click()
Dim r As Single
Dim a As Single
r = Val(Text1.Text)
a = Circle_area(r)
Me.Caption = Str(a)
End Sub[/code]
程序就能正确运行了。
另外没在DLL输出表里看到有Makelower函数,估计楼主忘了写这个函数。
楼主的其它一大堆错误就不说了,自己修改吧。
[quote]1、工具-选项里勾选强制变量声明,即在每个模块自动加上Option Explicit,并去掉勾选请求时编译,这样楼主的一大堆错误在编译期就能马上发现,请参阅[url]http://bbs.pfan.cn/post-310513.html[/url];
2、API函数名是区分大小写的;
3、此处的“楼主”=“zhao311”[/quote]
我来回复