调用一个扫描仪程序API问题,已知函数和.dll文件
Private Declare Function outputformatbtcvalidate Lib "C:\ProgramFiles\Kodak\XVCS6A\mcENnstd.dll" (ByVal x As Long) As Long
Private Sub Form_Load()
Dim x As Long
outputformatbtcvalidate (x)
End Sub
但是编译出错“找不到指定的.dll文件”,该.dll的功能是用户名验证。
问各位高手,我应该如何写声明和调用语句呢?
问题点数:100、回复次数:15Top
1 楼DooDu(杜霖:I want,I can(开关拉))回复于 2005-07-25 16:31:37 得分 15
把mcENnstd.dll复制到你的exe目录里,然后这样写:
Private Declare Function outputformatbtcvalidate Lib "mcENnstd.dll" (ByVal x As Long) As Long
Top
2 楼junki(『.NET技术争霸天下』)回复于 2005-07-25 16:40:11 得分 15
先手动注册一下,
如果你的outputformatbtcvalidate是全局调用API,最好把它声明为
公共类型,如:
Public Declare Function outputformatbtcvalidate Lib "mcENnstd.dll" (ByVal x As Long) As LongTop
3 楼scyu()回复于 2005-07-25 17:21:00 得分 0
回复 DooDu(杜霖:I want,I can.(MmMVP马甲)(准备闭关……)) :
mcENnstd.dll跟我的exe程序在一个目录下。
回复 junki(『打破沙锅问到底』) :
我改成public后,编译出错:“常数,数组,用户定义类型以及Declare语句不允许作为对象模块的Public成员”
请众高手继续赐教啊!
Top
4 楼supergreenbean(超级绿豆(MSMVP - VB) - 升级归来~)回复于 2005-07-25 17:48:14 得分 40
请保证mcENnstd.dll所要用到的dll都在他们该在的地方先
然后再讨论如何声明参数Top
5 楼scyu()回复于 2005-07-25 18:39:56 得分 0
请问supergreenbean(超级绿豆 - 天气酷热,把我煮了熬汤吧) :
你指的“该在的地方”是什么概念?我没有修改安装程序里的东西啊!其他的.dll文件都在一个路径里面:C:\ProgramFiles\Kodak\XVCS6A
请问junki(『打破沙锅问到底』) :
怎样手动注册呢?
Top
6 楼scyu()回复于 2005-07-26 09:57:57 得分 0
请高手指点啊!在线等!!!!Top
7 楼crycoming(瞎编)回复于 2005-07-26 11:02:38 得分 15
命令行中运行下面的语句注册
regsvr32.exe C:\ProgramFiles\Kodak\XVCS6A\mcENnstd.dllTop
8 楼scyu()回复于 2005-07-26 11:36:21 得分 0
回复 crycoming(瞎编):
晕了,为什么我在命令行中注册的时候出错,显示“LoadLibrary("c:\Program")failed-The specified module could not be found”,我的原路径program files中间有空格,这应该没问题吧?应该不是系统原因吧?
请众高手继续啊!Top
9 楼crycoming(瞎编)回复于 2005-07-26 12:57:06 得分 0
应该没有问题的 你可以改成短路径试试啊Top
10 楼jadeluo(秀峰)回复于 2005-07-26 13:04:36 得分 15
“先手动注册, 然后再申明...”???
不要误人子弟啊, 注册(针对ActiveX DLL而言)和申明只需要选择其一, 不会同时使用的。Top
11 楼scyu()回复于 2005-07-26 13:41:15 得分 0
感谢大家的关注,我觉得应该是 Dim x As Long
outputformatbtcvalidate (x)
这部分有问题,因为我想调用的是该软件的验证模块,而不是显示一个数字,但小弟又是刚接触vb,如果让我搞纯界面或WinApi可能好研究些,但是现在急需在自己的界面里调用该软件的程序,不知道参数调用部分怎么写,请大家继续指点啊!
Top
12 楼scyu()回复于 2005-07-26 18:22:37 得分 0
没人解决的了吗????明天下午结贴!Top
13 楼supergreenbean(超级绿豆(MSMVP - VB) - 升级归来~)回复于 2005-07-26 21:53:59 得分 0
你可以先把所有的dll复制到一个名称相对简单的目录里去(比如 C:\Dlls),然后再调用看
Private Declare Function outputformatbtcvalidate Lib "C:\Dlls\mcENnstd.dll" (ByVal x As Long) As Long
如果还是出现同样的找不到文件,那你就用depends之类的工具看看这个dll到底需要哪些其他的dllTop
14 楼scyu()回复于 2005-07-27 09:41:00 得分 0
感谢 supergreenbean(超级绿豆 - 天气酷热,把我煮了熬汤吧) 的指点!
我下载了dependency walker,分析了我的dll文件的依赖性以后,发现我要调用的dll包里面的大多数dll文件除了依赖相同目录下的另几个dll文件外,还依赖system32里面的一些系统的.dll文件,看来我死定了,这下更不知道怎么调用它们了!Top
15 楼supergreenbean(超级绿豆(MSMVP - VB) - 升级归来~)回复于 2005-07-27 16:23:41 得分 0
一般情况下你只要考虑那些除了windows自带dll外的第3方dll文件,把它们找到并放在一起后你就可以调用了Top




