我已尝试过所有其他相关主题的所有帮助,但没有解决问题,代码如下
VB6(DLL代码):
Public Function enterorder(vals() As Variant, ordhdr() As Variant) As String
................... code ............
enterorder = "done"
End Function
ASP:
SET objdll = server.createobject("dllproname.classname")
Dim values(1, 4)
Dim ordhdr(1)
dim ret
ordhdr(0) = "1012"
ordhdr(1) = "ASP TESTING descript"
values(0, 0) = "testing "
values(0, 1) = "testing 2"
values(0, 2) = "HO"
values(0, 3) = "2.0000"
values(0, 4) = "12.0000"
values(1, 0) = "testing part 2 "
values(1, 1) = "testing again"
values(1, 2) = "HO"
values(1, 3) = "2.0000"
values(1, 4) = "12.0000"
ret = objdll.EnterOrder(values(), ordhdr())
response.write("Done")
代码出错:
Microsoft VBScript运行时错误'800a0009' 下标超出范围
我尝试删除多维数组,只发送普通数组,但仍然存在相同的错误。
我也尝试在传递数组时移除paranthesis(),如(objdll.EnterOrder(values , ordhdr)
)它给出了类型不匹配错误。
我的VB6代码接受了字符串数组,但我根据帮助主题的一些指导原则将其更改为变体类型,这也没有帮助。
相同的代码工作,如果我将此dll添加到vb6项目引用然后调用相同的函数,它的工作完美。但与asp相同的代码不起作用。
感谢。
答案 0 :(得分:0)
在声明为变体
时删除()Public Function enterorder(vals As Variant, ordhdr As Variant) As String
答案 1 :(得分:0)
例如 ASP代码:
dim values
values = "a,b,c,d,e|f,g,h,i,j"
strlen = "1,4"
ret = objdll.EnterOrder((values), (dsordhdr),(strlen))
主要的是传递参数时,我把变量用paranthesis包装,因为没有它就没有用它,用参数包装它就像一个表达式,所以它起作用。
VB6代码
Public Function enterorder(ByVal valstring As Variant, ByVal ordhdrstring As Variant, ByVal arrlenstr As Variant) As Variant
Dim vals() as string
Dim arrlen() As String
arrlen = Split(arrlenstr, ",")
ReDim vals(arrlen(0), arrlen(1)) As String
valarry = Split(valstring, "|")
For ind = 0 To UBound(valarry)
orval = Split(valarry(ind), ",")
For sind = 0 To UBound(orval)
vals(ind, sind) = orval(sind)
outstr = outstr & orval(sind) & ","
Next
Next
所以它就像那样工作。 Redim是必要的,因为我第一次声明数组,而在做redim时我把数组的索引。没有它就行不通。