vbscript 调用其他控件 返回值为数组时 出现 类型不匹配错误

电动汽车砖家刘博士 2009-01-12 10:02:29
用vbscript调用一个其他语言写的控件,该控件在vb6中可以正常使用,如下是vb6中的代码

vRet = frmMain.FK524ID1.GetEnrollData(mMachineNumber, _
vEnrollNumber, _
vFingerNumber, _
vPrivilege, _
glngEnrollData, _
glngEnrollPData)
其中mMachineNumber,
vEnrollNumber,
vFingerNumber,
vPrivilege,glngEnrollPData均为参数代进去的,只有glngEnrollData是个数组返回的,在vb6中可以正常使用,
同时在vb6中定义的也确实是数组

现在是这样子的,想把该控件使用在web页面中,我先再用vb6封装了一下,
Public Function GetEnrollData(FK524ID As Variant, mMachineNumber As Long, vEnrollNumber As Long, vFingerNumber As Long, vPrivilege As Long, ByRef glngEnrollData As Variant, glngEnrollPData As Variant) As Long
Dim gTemplngEnrollData As Variant
vRet = FK524ID.GetEnrollData(mMachineNumber, _
vEnrollNumber, _
vFingerNumber, _
vPrivilege, _
gTemplngEnrollData, _
glngEnrollPData)
glngEnrollData = gTemplngEnrollData
End Function
然后在网页中这样调用
<script type="text/vbscript" language="vbscript">
sub GetSerialNumber1()
Dim obj, vret, mMachineNumber
Dim glngEnrollData1
mMachineNumber = 1

Set obj = document.getElementById("FK524ID1")
If Not IsObject(obj) Then Exit Sub

If Not obj.OpenCommPort(3) Then Exit Sub

obj.CommPort = 1

If Not obj.EnableDevice(mMachineNumber, False) Then
MsgBox "Err"
Exit Sub
End If

Set proxy = CreateObject("prj_fk524.fk524") ' CreateObject("工程1.Class1")
vret = proxy.GetEnrollData(obj, 1, 8, 0, 0,glngEnrollData1,0)
If vret<> 0 Then
msgbox "ok"
Else
msgbox "Can Not Get Enroll Data !"
End If
end sub
</script>

然后就出现了类型不匹配的问题,不知道是那个环节有问题,请兄弟们帮我看看吧
...全文
2606 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨晨 2009-03-15
  • 打赏
  • 举报
回复
4楼的说的很对,你的控件实现IDispache接口了吗?
toury 2009-01-15
  • 打赏
  • 举报
回复
至少应该有一句
'................................
GetEnrollData=glngEnrollData 之类的句子吧
End Function
toury 2009-01-15
  • 打赏
  • 举报
回复
你封装的根本不是一个接口,当然取不到值

在VB6下你可以正常使用是由于它不用接口,而是直接调用原函数;但你既然要封装成DLL用在WEB上,那:
------------
现在是这样子的,想把该控件使用在web页面中,我先再用vb6封装了一下,
Public Function GetEnrollData(FK524ID As Variant, mMachineNumber As Long, vEnrollNumber As Long, vFingerNumber As Long, vPrivilege As Long, ByRef glngEnrollData As Variant, glngEnrollPData As Variant) As Long
Dim gTemplngEnrollData As Variant
vRet = FK524ID.GetEnrollData(mMachineNumber, _
vEnrollNumber, _
vFingerNumber, _
vPrivilege, _
gTemplngEnrollData, _
glngEnrollPData)
glngEnrollData = gTemplngEnrollData
End Function
-----------------
GetEnrollData借口函数的返回值呢??
  • 打赏
  • 举报
回复
wcwtitxu

你是个活雷锋


glngEnrollData 是Variant
vPrivilege 是long型
glngEnrollPData 是long型
  • 打赏
  • 举报
回复
你封装以后你还得实例化才能用吧

里面的参数都分别什么类型?
wcwtitxu 2009-01-13
  • 打赏
  • 举报
回复
vPrivilege
glngEnrollData
glngEnrollPData

分别是什么类型?

4,008

社区成员

发帖
与我相关
我的任务
社区描述
它是一种微软环境下的轻量级的解释型语言,它使用COM组件、WMI、WSH、ADSI访问系统中的元素,对系统进行管理。
社区管理员
  • vbScript社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧